python对象引用引起的问题

来源:互联网 发布:淘宝美术设计招聘 编辑:程序博客网 时间:2024/06/01 10:30

我们都知道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] = 5print 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 ca[0] = 5print c#[array([1, 2, 3]), [11, 22, 33]]#[array([1, 2, 3]), [11, 22, 33]]
0 0
原创粉丝点击