【发布时间】:2021-08-28 04:58:33
【问题描述】:
我正在尝试通过一些教程来学习编码,并在查看运算符时遇到了一些奇怪的事情。我得到了基本的,但其他一些(如 *= 这里)让我失望。
a = 1
b = a
a *= 2
print(a)
print(b)
输出
2
1
但是当 a 是一个数组时,就会发生这种情况:
a = np.array([1, 2, 3, 3, 5, 5])
b = a
a *= 2
print(a)
print(b)
输出
[2 4 6 6 10 10]
[2 4 6 6 10 10]
关于为什么会发生这种情况的任何见解?我真的找不到太多关于它的信息。我唯一遇到的是“强制规则”;第二个实例是否会发生,因为 a 被分配给一个数组,然后是一个整数?还是打印语句顺序的问题? 这可能是微不足道的,但我只是好奇,谢谢!
【问题讨论】:
-
您是在问为什么
a和b具有相同的值,或者为什么a * 2将a中的值加倍? -
为什么 a 和 b 在第二个实例(但不是第一个)中具有相同的值
-
@spokati 在两者中,最初是 a 和 b 并引用同一个对象。在第一个整数中,通过返回一个新的整数对象来处理
*=,因此 a 和 b 现在是不同的。在第二个 numpy 数组中处理*=,方法是修改数组并返回相同的对象,因此 a 和 b 仍然引用相同的(修改后的)数组 -
除了教程,你还应该有一本像样的python书,还有
numpy文档,以numpy.org/doc/stable/user/absolute_beginners.html开头
标签: python numpy numpy-ndarray