我们都知道python中一切皆是对象,这句话我记得很清楚,但是平时用起来确也容易混淆。
今天遇到一个bug,大概情况是这样:
a = [1,2,3]
b = [11,22,33]
c = [a,b]
print c
# c = [[1, 2, 3], [11, 22, 33]]
我在一个文件中修改了a,而在另一个列表中读c,结果发现c总是不对…..检查好久才想起来了,c中存贮的a应该是a的引用,也就是python中常见的对象浅拷贝。测试一下:
a[0] = 5
print c
# c = [[5, 2, 3], [11, 22, 33]]
以后一定要注意啊,特别是多处读写的敌方,很容易忽视!
如果在c中独自保留a的副本,则应该使用copy。
a = [1,2,3]
b = [11,22,33]
np.copy(a)
c = [np.copy(a), b]
print c
a[0] = 5
print c
#[array([1, 2, 3]), [11, 22, 33]]
#[array([1, 2, 3]), [11, 22, 33]]