问题简化一下,是这样的
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代码是完全没法看的......
|
3
Livid MOD |
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 2
关键字应该是 python deep copy
|
6
staticor 2015-04-29 15:01:06 +08:00 2
改成 append(b[:])
|
9
lixia625 2015-04-29 15:07:23 +08:00 1
|
10
goodryb 2015-04-29 15:11:26 +08:00 3
你每次都是把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
基本类型和引用类型的区别?
|