这里遇到的一个小坑-python中的二维列表
缘起于某个同学问了我一个问题(我自己学的话万万不会抠得那么深...)
他的程序是这样的:
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
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: ALIGN(x, mask)函数详解
- 下一篇: 用Vue实现排序功能