python - 为什么将一个变量设置为等于另一个变量会改变此代码中的任何内容?

标签 python list variable-assignment godot

我在使用以下代码 (Python) 时遇到一些问题:

x = [0,0]
y = [[1,1],[2,2],[3,3]]
z = y
# z = [[1,1],[2,2],[3,3]]

print(y)
for i in range(0,len(z)):
    if i == 0:
        z[i] = x
    else:
        z[i] = y[i-1]
print(y)

y = z

print(y)
for i in range(0,len(z)):
    if i == 0:
        z[i] = x
    else:
        z[i] = y[i-1]
print(y)

我期望的输出是

[[1, 1], [2, 2], [3, 3]]
[[1, 1], [2, 2], [3, 3]]
[[0, 0], [1, 1], [2, 2]]
[[0, 0], [1, 1], [2, 2]]

但我得到的是

[[1, 1], [2, 2], [3, 3]]
[[0, 0], [0, 0], [0, 0]]
[[0, 0], [0, 0], [0, 0]]
[[0, 0], [0, 0], [0, 0]]

当我使用我为 z 注释掉的行时,我得到了

[[1, 1], [2, 2], [3, 3]]
[[1, 1], [2, 2], [3, 3]]
[[0, 0], [1, 1], [2, 2]]
[[0, 0], [0, 0], [0, 0]]

为什么输出的第 1 行和第 2 行以及第 3 行和第 4 行不总是相同?据我所知,我没有做任何事情来改变 y (除了 y=z ),而且我不明白为什么在开始时使用 z=y 或 z = [...] 会有所不同。

最佳答案

将此行z = y更改为

from copy import deepcopy 

z = deepcopy(y)

您的代码将正常工作。

关于python - 为什么将一个变量设置为等于另一个变量会改变此代码中的任何内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54786257/

相关文章:

java - Java表达式中的后自增和预自增

python、Django 与使用 urllib2 发送 pdf 相关

列表重新格式化中的 Python 列表

python - 如何仅使用正则表达式提取数字?

javascript - 修改 li 的子集

python - 使用 'for' 更新嵌套列表中的元素在 python 列表中不起作用

java - 为什么一些开发人员以这种方式分配原始整数?整数 i = 0x0001

ruby - 一元运算符的运算符优先级

python - 如何理解这个结果?

python - Ubuntu 更新后 Python 中的段错误