我是Python的初学者,我正在学习Mark Lutz的学习Python第5版。
在研究范围界定和对象参考时,我遇到了一件我完全不理解的事情。我知道,当您将对象分配给其他对象时,除非您执行顶级复制,否则它们只是共享对同一地址的引用。但是,我注意到当你“嵌套”对象时,两个对象不再共享相同的地址。
例如,
>>> L = [4, 5, 6]
>>> X = L * 4 # Like [4, 5, 6] + [4, 5, 6] + ...
>>> Y = [L] * 4 # [L] + [L] + ... = [L, L,...]
>>> X
[4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6]
>>> Y
[[4, 5, 6], [4, 5, 6], [4, 5, 6], [4, 5, 6]]
>>> L[1] = 0 # Impacts Y but not X
>>> X
[4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6]
>>> Y
[[4, 0, 6], [4, 0, 6], [4, 0, 6], [4, 0, 6]]
这是我不明白的部分。 为什么更改L对象会影响Y而不影响X?
答案 0 :(得分:3)
你有2个不同的案例:
X = L * 4
创建一个包含4个L
元素副本的新列表。
Y = [L] * 4
创建一个包含4个L
引用的新列表。所以你最终得到的结果是:Y = [L, L, L, L]