gpt4 book ai didi

Python奇怪的行为: "+=" creates aliases

转载 作者:行者123 更新时间:2023-11-30 22:54:33 25 4
gpt4 key购买 nike

我无法解释这段代码的行为:

n=[[0,0],[0,0]]
m=n.copy()
for i in range(len(m)):
m[i]+=[0]

我得到的输出是(不是我预期的):

>>> m
[[0, 0, 0], [0, 0, 0]]
>>> n
[[0, 0, 0], [0, 0, 0]]

如果我输入:

n=[[0,0],[0,0]]
m=n.copy()
for i in range(len(m)):
m[i]=m[i]+[0]

我得到了正确的输出(这是我最初期望的):

>>> m
[[0, 0, 0], [0, 0, 0]]
>>> n
[[0, 0], [0, 0]]

所以,看起来如果我使用“+=”快捷方式,两个矩阵“m”和“n”就会成为别名。有人可以解释一下为什么会发生这种情况吗?

最佳答案

n.copy() 创建浅拷贝,因此 n[i]m[i] 已经指向同一个对象(尽管 mn 不同)。

对于列表,x += yx = x + y 并不完全相同 - 前者会改变 x 直接(相当于 x.extend(y)),而后者将 x 分配给一个新值。

这两个事实结合起来解释了这种行为。

关于Python奇怪的行为: "+=" creates aliases,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37737645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com