浅拷贝操作混乱

时间:2019-09-14 06:20:01

标签: python

我试图了解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]]

因此,对于每个浅表副本,它在子变量中创建父对象的引用,因此当我们更改父对象时,它会在子变量中反映出来,但是这里的引用仅在子列表中发生了变化。为什么这样?

1 个答案:

答案 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

还要阅读其他人发布的链接。