[Python Cookbook] 在无须共享引用的条件下创建列表的列表

1. 任务

你想创建一个多维度的列表,且同时避免隐式的引用共享。

2. 解决方案

使用列表推导。举个例子,创建一个5*10的全为0的阵列:

multilist = [ [ 0 for col in range(5) ] for row in range(10) ]

3.讨论

当我们使用这种方式时,会遇到问题:

>>> multi=[[0]*5]*3
>>> print multi
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
>>> multi[0][0]='ops'
>>> print multi
[['ops', 0, 0, 0, 0], ['ops', 0, 0, 0, 0], ['ops', 0, 0, 0, 0]]

这就是所谓的共享引用。

Leave a Reply