我有这两组代码,我假设两者应该有相等的输出,但它们没有。有人能告诉我这两个密码在传递什么吗?任何见解都非常感谢。设置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中的所有值都改变了。