*= 数组和整数之间的乘数问题
*= multiplier question between arrays and integers
我正在尝试通过一些教程学习编码,但在复习运算符时遇到了一些奇怪的事情。我得到了基本的,但其他一些(比如这里的 *=)让我失望。
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 被分配给一个数组然后又被分配给一个整数吗?还是打印语句顺序的问题?
这可能是微不足道的,但我只是好奇,谢谢!
您问题的简单答案是,
Python中有两种对象:可变对象和不可变对象。可变对象的值可以在创建后就地修改,而不可变对象的值不能更改。
不可变(不可修改)对象: int、float、long、complex、string tuple、bool
Mutable(Modifiable) Object: list, dict, set, byte array, user-defined classes.
所以,在你的情况下,首先 a 和 b 是不可变对象,因为它属于 python 中的 class int,"b=a" 表示 b 指向一个地址,并且作为您将 a 的值更新为 a*=2,该值存储在新的内存位置,但 b 仍指向旧地址,这就是为什么 b 没有显示 a 的更改值。
想了解更多python中的内存管理,请阅读这篇博文,谢谢:)
https://medium.com/@tyastropheus/tricky-python-i-memory-management-for-mutable-immutable-objects-21507d1e5b95
我正在尝试通过一些教程学习编码,但在复习运算符时遇到了一些奇怪的事情。我得到了基本的,但其他一些(比如这里的 *=)让我失望。
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 被分配给一个数组然后又被分配给一个整数吗?还是打印语句顺序的问题? 这可能是微不足道的,但我只是好奇,谢谢!
您问题的简单答案是,
Python中有两种对象:可变对象和不可变对象。可变对象的值可以在创建后就地修改,而不可变对象的值不能更改。
不可变(不可修改)对象: int、float、long、complex、string tuple、bool
Mutable(Modifiable) Object: list, dict, set, byte array, user-defined classes.
所以,在你的情况下,首先 a 和 b 是不可变对象,因为它属于 python 中的 class int,"b=a" 表示 b 指向一个地址,并且作为您将 a 的值更新为 a*=2,该值存储在新的内存位置,但 b 仍指向旧地址,这就是为什么 b 没有显示 a 的更改值。
想了解更多python中的内存管理,请阅读这篇博文,谢谢:) https://medium.com/@tyastropheus/tricky-python-i-memory-management-for-mutable-immutable-objects-21507d1e5b95