Discuss / Python / 关于tuple‘可变’的一点思考:

关于tuple‘可变’的一点思考:

Topic source

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中了

L = [
    ['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-虫儿

#3 Created at ... [Delete] [Delete and Lock User]

不是b指向另外的list,而是python是一种动态语言导致的,相当于t中的b,和你后面再次赋值的b不是同一个b

这个好奇怪,python当中对同一个变量赋值两次,第二次就会新开一个存储吗?

夏释秋良

#5 Created at ... [Delete] [Delete and Lock User]

从表现上分析应该是这样的(个人猜测):

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

Reply