python入门之二:tuple

python中另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改。

例如:

fruit = ('Grapes','pineapple','banana')


“可变的”tuple

t = ('a', 'b', ['A', 'B'])
t[2][0] = 'X'
t[2][1] = 'Y'
print(t)
输出结果为('a', 'b', ['X', 'Y'])

表面上看,tuple的元素确实变了,但其实变的不是tuple的元素,而是list的元素。tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向'a',就不能改成指向'b',指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!


另一个例子:

list = ['A','B',]
t = ('a','b',list)
list = ['X','Y']
print(t)
输出结果为('a', 'b', ['A', 'B']),但是当换为: list[0] = 'X' list[1] = 'Y'时,输出结果为('a', 'b', ['X', 'Y'])。

这是因为t = ('a','b',list)这个赋值已经让t指向了内存中list所指向的值即指向了A,B 虽然后来list = ['X','Y']list被重新指向了X,Y。但是t所指向的值并未改变,所以仍然是('a', 'b', ['A', 'B'])。 即,变量都是指向内存中的值,而不是指向某个变量名。

也可以说:l=['X','Y'] 因为这种赋值方式,给l用重新分配了新的内存单元去存储x和y的值,而tuple的指向是不变的,也就是说tuple指向list,list指向原来值的内存单元,所以tuple的值不改变。而l[0]=['X'],l[1]=['Y'] 这种赋值方式,是修改了l[0]和l[1]所指向的内存单元中存储的值。tuple执行list,而list仍然指向这两个内存单元,所以tuple的值跟着改变了。


你可能感兴趣的:(python)