我试图了解python中浅层复制的代码操作
创建了一个对象
o = [1,12,32,423,42,3,23,[1,2,3,4]]
创建浅表副本并分配给变量
r = copy.copy(o)
print(r)
[1, 12, 32, 423, 42, 3, 23, [1, 2, 3, 4]]
然后尝试在两个不同的索引中分配新值
o[1]="ff"
o[7][1]="kk"
print(r)
[1, 12, 32, 423, 42, 3, 23, [1, 'kk', 3, 4]]
因此,对于每个浅表副本,它在子变量中创建父对象的引用,因此当我们更改父对象时,它会在子变量中反映出来,但是这里的引用仅在子列表中发生了变化。为什么这样?
答案 0 :(得分:1)
通过运行以下代码(修改后)尝试观察正在发生的情况:
print(id(r[1]))
print(id(o[1])) # different
print(id(r[7]))
print(id(o[7])) # same
print(id(r[7][1]))
print(id(o[7][1])) # same
还要阅读其他人发布的链接。