gpt4 book ai didi

python - 为什么 python/numpy 的 += 会改变原始数组?

转载 作者:太空狗 更新时间:2023-10-29 20:49:26 25 4
gpt4 key购买 nike

import numpy as np

W = np.array([0,1,2])
W1 = W
W1 += np.array([2,3,4])
print W

W = np.array([0,1,2])
W1 = W
W1 = W1 + np.array([2,3,4])
print W

上层代码会变异W,但下层代码不会变异W。为什么?

最佳答案

几乎所有类型的集合都是如此。这仅仅是由于 python 处理变量的方式。 var1 += var2 与集合的 var1 = var1 + var2 不同。我会就我的理解进行解释,这当然可以改进,因此欢迎任何编辑/批评。

print("1:")
x1 = [7]
y1 = x1
y1 += [3]
print("{} {}".format(x1, id(x1)))
print("{} {}".format(y1, id(y1)))

print("2:")
x2 = [7]
y2 = x2
y2 = y2 + [3]
print("{} {}".format(x2, id(x2)))
print("{} {}".format(y2, id(y2)))

输出:

1:
[7, 3] 40229784 # first id
[7, 3] 40229784 # same id
2:
[7] 40228744 # first id
[7, 3] 40230144 # new id

var1 = var1 + var2 创建一个带有新 ID 的新对象。它采用旧值,将其添加到第二个变量,并将其分配给具有第一个对象名称的新对象。在 var1 += var2 的例子中,它只是将它附加到 ID 指向的对象上,这与旧变量相同。

关于python - 为什么 python/numpy 的 += 会改变原始数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35910577/

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