如果我在Python 2.7中運行以下代碼,我會爲a和b打印[2.,2.,2.]。爲什麼b和a一起變化?非常感謝!如何在Python函數中傳遞變量?
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)
如果我在Python 2.7中運行以下代碼,我會爲a和b打印[2.,2.,2.]。爲什麼b和a一起變化?非常感謝!如何在Python函數中傳遞變量?
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)
因爲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()
將創建一個新的複製恰好類似的a
的元素,而b=a
只是創建了一個新的引用等植物學列表。
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.]
謝謝,基思!這是一個非常明確的解釋! – nusjjsun
,因爲a和b指向同一個內存位置拿着名單 – danidee