使用multiply创建包含列表的列表

boa*_*ten 3 python list

>>> a = []
>>> b = [a*2]
>>> b
[[]]
>>> b = [copy.deepcopy(a)*2]
>>> b
[[]]
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建b一个包含两个副本的列表a.为什么b[[],[]]呢?我怎样才能让这个b[[],[]]

koj*_*iro 5

如果你想创建b相a在这两次:

a = []
b = [a] * 2
Run Code Online (Sandbox Code Playgroud)

但要注意,列表是可变的!

b[1].append('foo')
b
[['foo'], ['foo']]
Run Code Online (Sandbox Code Playgroud)

如果你想有两个创建b 副本a:

b = [a[:] for i in range(2)]
Run Code Online (Sandbox Code Playgroud)

要更好地控制副本的性质(vs绑定),请阅读python 副本模块文档.

  • 感谢您试图阻止另一个浅层复制问题. (2认同)