
问题简化一下,是这样的
a = [] b = [] for i in range(10): b.append(i) a.append(b) print(a) print() 两个数组,a 每次都增加一个数组 b,结果应该是[[0]], [[0], [0,1]], [[0], [0, 1], [0, 1, 2]].......
可是实际结果是a里的每个元素都相等,成了 [[0]], [[0, 1], [0, 1]], [[0, 1, 2], [0, 1, 2], [0, 1, 2]]
实在搞不懂,求大神帮助!!!
1 zgoing OP 缩进错了不显示了,其实应该是从第四行起全部缩进 |
2 Mush 2015-04-29 14:36:43 +08:00 没缩进的Python代码是完全没法看的...... |
&bsp; 3 Livid MOD PRO |
4 cloverstd 2015-04-29 14:46:08 +08:00 因为 b 是一个数组,是引用 id(a[0]) == id(b) |
5 cloverstd 2015-04-29 14:46:45 +08:00 关键字应该是 python deep copy |
6 staticor 2015-04-29 15:01:06 +08:00 改成 append(b[:]) |
9 lixia625 2015-04-29 15:07:23 +08:00 |
10 goodryb 2015-04-29 15:11:26 +08:00 你每次都是把b添加进去,相当于a[0]=b,a[1]=b ... a[n]=b,所以a中的每个元素都是相同的 假设b=[0,1,2],a.append(b)和a.append([0,1,2])是不一样的,看下面的例子 >>> b=[0,1,2] >>> b [0, 1, 2] >>> a=[] >>> a.append(b) >>> a.append([0,1,2]) >>> a [[0, 1, 2], [0, 1, 2]] >>> b.append(3) >>> a [[0, 1, 2, 3], [0, 1, 2]] >>> |
11 twor2 2015-04-29 15:19:52 +08:00 |
16 hansnow 2015-04-29 22:12:34 +08:00 via iPhone 我记得我在Javascript里也遇到过类似的问题,原因就是b只是个地址 |
17 Andrewliu 2015-04-29 22:59:48 +08:00 深浅拷贝问题, |
18 fanta 2015-04-30 09:52:41 +08:00 还是你没有完理解Python 所至. |
20 fanta 2015-04-30 12:13:54 +08:00 @zgoing 可以参考: https://github.com/qyuhen/book Python 笔记. |
21 FindHao 2015-04-30 15:12:57 +08:00 基本类型和引用类型的区别? |