Python

时间:2018-04-18 00:38:00

标签: python object sharedpreferences scoping

我是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?

1 个答案:

答案 0 :(得分:3)

你有2个不同的案例:

  1. X = L * 4创建一个包含4个L元素副本的新列表。

  2. Y = [L] * 4创建一个包含4个L引用的新列表。所以你最终得到的结果是:Y = [L, L, L, L]