如果我在Python 2.7中运行以下代码,我会为a和b打印[2.,2.,2。]。为什么b与a一起变化?非常感谢!
def test_f(x):
a = np.zeros(3)
b = a
for i in range(3):
a[i] += x
print a
print b
return 0
test_f(2)
答案 0 :(得分:5)
因为b
和a
指的是内存中的相同列表。 b = a
不会创建a
的新副本。
试试这个,看看差异:
def test_f(x):
a = np.zeros(3)
b = a.copy()
for i in range(3):
a[i] += x
print a
print b
return 0
test_f(2)
b = a.copy()
将创建一个与<{1}}的元素完全相似的新副本,而a
只会创建对现有列表的新引用。
答案 1 :(得分:2)
numpy将使用指针进行复制,除非你另有说明:
import numpy as np
def test_f(x):
a = np.zeros(3)
b = np.copy(a)
for i in range(3):
a[i] += x
print a
print b
return 0
test_f(2)
[ 2. 2. 2.]
[ 0. 0. 0.]