关于tuple里面list的赋值问题?
Topic source是不是可以理解成, 第二个list=['',''] 其实并不是给list数组重新赋值 而是重新定义了list数组这个变量 即使在数组里面元素数量相同的情况下 其实也是改变了list这一变量 在tuple中就不会承认这种方法 如果改成 list[0] = 'X' list[1] = 'Y' 那结果就是对的了
好像突然整明白了这个问题。 t = ('a','b',list)这个赋值已经让t指向了内存中list所指向的值即指向了A,B 虽然后来list = ['X','Y']list被重新指向了X,Y。但是t所指向的值并未改变,所以仍然是('a', 'b', ['A', 'B'])。 即,变量都是指向内存中的值,而不是指向某个变量名。
这是个好问题,我也想知道原因?因为print(list)的结果是['X','Y'],我的理解应该list的指向变了的原因吧,这样重新赋值相当于是重新给list分配空间,对于tuple来说就不允许的。
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的值跟着改变了。
ACKD-东杰
根据楼主的tuple学习,做了些练习,发现下面的写法,t里面的list变量没有被重新赋值,请问是为什么呢? 一、定义: list = ['A','B',] t = ('a','b',list) 二、重新赋值给list: list = ['X','Y'] 三、执行t,输出为还是: ('a', 'b', ['A', 'B'])