两种方式初始化list但结果完全不同,python离奇问题求解

Nelson_Hong 发布于 2014/04/23 22:04
阅读 1K+
收藏 0
#=====生成方式1=====
P=[]
for j in range(0,2):
    Q=[0]*2
    R=[]
    for i in range(0,3):
        R.append(Q)
    P.append(R)    
print P
P[0][0][0]=1
print P
#==================


#=====生成方式2=====


P=[[[0, 0], [0, 0], [0, 0]], [[0, 0], [0, 0], [0, 0]]]
print P
P[0][0][0]=1
print P
#==================

输出:

[[[0, 0], [0, 0], [0, 0]], [[0, 0], [0, 0], [0, 0]]]
[[[1, 0], [1, 0], [1, 0]], [[0, 0], [0, 0], [0, 0]]]
[[[0, 0], [0, 0], [0, 0]], [[0, 0], [0, 0], [0, 0]]]
[[[1, 0], [0, 0], [0, 0]], [[0, 0], [0, 0], [0, 0]]]

Why????



加载中
0
huan
huan

因为方式一中的p[0][0]== p[0][1]==p[0][2], python中数组是一个对象,你在循环中引用了三次同一个对象。

如果内层循环改成

for i in range(0,3):

    Q=[0]*2

    R.append(Q)

就和方式2一样了

N
Nelson_Hong
太感谢了,果真如此!
返回顶部
顶部