关于tuple‘可变’的一点思考:
Topic sourceL = [
['Apple', 'Google', 'Microsoft'],
['Java', 'Python', 'Ruby', 'PHP'],
['Adam', 'Bart', 'Lisa']
]
print('L=',L)
print('打印Apple:',L[0][0])
print('打印Python:',L[1][1])
print('打印Lisa:',L[2][2])
从表现上分析应该是这样的(个人猜测):
l=[1,2]
分配新的内存地址z1
给变量l
t=(1,2,l)
分配新的内存地址z2
给变量t
,且第3个元素t[2]
指向的是内存地址z1
,不是变量l
通过下标访问方式来修改内存地址z1
,可以同时通过变量l
或变量t
来修改
l[0]=3
t[2][1]=4
此刻lt的值是 l 值:[3,4] t 值:(1,2,[3,4])
l = [1,2]
分配新的内存地址(z3)给l
此刻lt的值是 l 值:[1,2] t 值:(1,2,[3,4])
总结:
- 下标访问可以访问到原来的地址
z1
- 赋予语句开辟了新的内存地址
z3
给了变量l
- 元组t中得到
t[2]
的指向还是不变,指向的是内存地址z1
- 1
早起的达先生
b=[0,1] t=(1,'a',b) 此时输入t,结果为(1,'a',[0,1]) 对b操作:b[0]='ddd' 此时输入t,结果为(1,'a',['ddd',1]) 实现了tuple‘可变’ 再对b操作:b=[111,222] 此时输入t,结果为(1,'a',['ddd',1]) 没有实现了tuple的‘可变’,这是因为对b操作:b=[111,222],使得b指向另外的列了,而b也不存在于t所指向的tuple中了