这里遇到的一个小坑-python中的二维列表

来源:互联网 发布:软件自主开发销售收入 编辑:程序博客网 时间:2024/05/16 16:05

缘起于某个同学问了我一个问题(我自己学的话万万不会抠得那么深...)

他的程序是这样的:

listx=[]graph=[]for a in range(0,10):    listx.append(99999)for b in range(0,10):    graph.append(listx)graph[0][0]=0print graph

他原意是想就给这个二维列表的第一行第一列赋值0 即graph[0][0]=0,然而却出现了以上的结果...
经过一系列的 "怎么会!不可能啊!奇怪...!!!" 后,这个结果的原因是:

他给graph添加的是个元素始终都是listx这个列表,因此,graph所有元素的值都是listx的一个浅复制。他们都指向同一个地址,即listx的内存地址,因此只要改变graph当中一个元素的值,就会影响到其他元素。所以如上例,当将graph第一行第一列的值由9999变为0后,其他行也发生了改变。

下面是修改后的代码:

graph = [[] for i in range(10)]for a in range(0,10):    for b in range(0,10):        graph[a].append(9999)graph[0][0]=0        print graph



0 0
原创粉丝点击