问题简化一下,是这样的
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 Apr 29, 2015
没缩进的Python代码是完全没法看的......
|
3
Livid MOD PRO |
4
cloverstd Apr 29, 2015
因为 b 是一个数组,是引用
id(a[0]) == id(b) |
5
cloverstd Apr 29, 2015 关键字应该是 python deep copy
|
6
staticor Apr 29, 2015 改成 append(b[:])
|
9
lixia625 Apr 29, 2015 |
10
goodryb Apr 29, 2015 你每次都是把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 Apr 29, 2015
|
16
hansnow Apr 29, 2015 via iPhone
我记得我在javascript里也遇到过类似的问题,原因就是b只是个地址
|
17
Andrewliu Apr 29, 2015
深浅拷贝问题,
|
18
fanta Apr 30, 2015
还是你没有完理解Python 所至.
|
20
fanta Apr 30, 2015
@zgoing 可以参考: https://github.com/qyuhen/book Python 笔记.
|
21
FindHao Apr 30, 2015
基本类型和引用类型的区别?
|