python 见鬼了,两个列表内存地址不同,改一个表的数据,另一个表也改

a = [[1, 2], [3, 4]]
b = a[:]

print(id(a))
print(id(b))

b[-1][-1] = 5
print(a)
print(b)

print(id(a))
print(id(b))

结果如下:

29949064
128439280
[[1, 2], [3, 5]]
[[1, 2], [3, 5]]
29949064
128439280

相当于b是a的引用(C++)。

请尝试使用深拷贝。

import copy

b = copy.deepcopy(a)

列表切片是浅拷贝,只拷贝一层,第二层的列表只是简单的赋值,没有拷贝。

a,b中第二层的列表地址一样

print(id(a[0]))

print(id(b[0]))

 

..

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

列表切片是浅拷贝

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632