牛骨文教育服务平台(让学习变的简单)
博文笔记

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

创建时间:2016-12-19 投稿人: 浏览次数:195

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

他的程序是这样的:

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

graph[0][0]=0
print 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



声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。