在python中有for循环和in范围的2D数组



我有这两组代码,我假设两者应该有相等的输出,但它们没有。有人能告诉我这两个密码在传递什么吗?任何见解都非常感谢。设置1

x = [[1],[1],[1],[1],[1]]
for i in x:
print(i)
x[1][0]=99
print(x[1][0])
for i in x:
print(i)

set1的输出是

[1]
[1]
[1]
[1]
[1]
99
[1]
[99]
[1]
[1]
[1]

关于我校

y = [1]
x = []
for i in range(5):
x.append(y)
for i in x:
print(i)
x[1][0]=99
print(x[1][0])
for i in x:
print(i)
set2的输出是

[1]
[1]
[1]
[1]
[1]
99
[99]
[99]
[99]
[99]
[99]

你需要用python理解references

y = [1]
x = []
for i in range(5):
x.append(y)
这部分代码将用引用填充列表x。到y变量,你可以想象它是
>>> x
>>> [y, y, y, y, y]
所以在你的代码中,当你执行
x[1][0]=99

您确实在编辑y变量!现在:

>>> y
>>> [99]
>>> x
# As stated before, it's like [y, y, y, y, y]
>>> [99, 99, 99, 99, 99]

这是你的代码不能工作的原因。

在第二组中,当您执行x.append(y)时,将y的引用附加到x。因此,对它的原始或任何引用的所有更改将应用于所有引用。

这就是为什么当你在x[1][0]=99赋一个不同的值时,所有的y引用都会改变。

你可以阅读更多:https://www.geeksforgeeks.org/pass-by-reference-vs-value-in-python/

因为它是通过引用的。在第二组中,你实际上改变了y,所以x中的所有值都改变了。

最新更新