如果你在Python中这样定义一个类:
现在,如果我们调用
import numpy as np
class Foo:
def __init__(self, data):
self.data = data
self.data_copy = self.copy(self.data)
def copy(self, data):
a = []
for e in data:
a.append(e)
return a
def change(self, val):
for i in range(0, len(self.data_copy)):
self.data_copy[i] += val
然后创建一个类的实例,例如:
a = Foo([np.matrix([1,2,3]), np.matrix([5,6,7])])
现在,如果我们调用
a.change(np.matrix([5,5,2]))
函数,它只应该修改self.data_copy
列表,但self.data
列表也会随着更改而更新。看起来即使创建了一个新列表,两个列表中的Numpy矩阵仍然保持连接。这在某些方面是一个不错的特性,但如果我传递了一个普通的Python数字列表,则无法正常工作。这是一个bug吗,还是Numpy矩阵复制的副作用?如果是后者,那么用普通的Python列表复制此行为的最佳方法是什么?
a = Foo([[1], [2]])
和a.change([3])
有相同的行为。 - Ericchange()
函数更改为=
而不是+=
,则该行为将消失... - rugrln