【发布时间】:2017-07-29 08:46:15
【问题描述】:
今天当我做这样的事情时发生了奇怪的事情:
a = np.array([1, 2, 3])
b = a
b[0] = 0
print a, b
然后值好像是通过引用传递的!答案变成:
result: [0 2 3] [0 2 3]
但通常我认为python中的变量是按值传递的,像这样:
a = np.array([1, 2, 3])
b = a
b = np.array([0, 2, 3])
print a, b
然后答案就变成了:
result: [1 2 3] [0 2 3]
但是为什么会这样呢?如何确定变量是通过引用传递还是通过值传递?有人说这是因为可变对象,但我还是不太明白。那你能给我解释一下吗?非常感谢!
【问题讨论】:
-
你觉得这有什么奇怪的?
-
作业 从不 在 Python 中复制。它总是这样工作的。您的第二个示例与您的第一个示例完全相同。
-
在第二种情况下,您将新对象
np.array([0, 2, 3])分配给b,而不是更改原始对象。更具体地说,如果你在第二种情况下写b = None或b = 10,它不会对a产生任何影响,这是合理的。 -
另外,这不是关于评估策略,而是关于分配在 Python 中的工作方式。阅读Python has names, not variables。另外,请查看Facts and Myths about Python Names and Values。
标签: python python-2.7 pass-by-reference