为什么'append'会改变列表中的所有元素?

Dom*_*bey 3 python list

我正在建立一份清单清单.我正在读取输入文件中的元素.我正在读取文件中的每一行作为字符串单元素到列表中的子列表.首先,我创建了列表列表:

>>> b = [[]] * 5
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试追加项目时,我得到以下内容:

>>> b[1].append("abc")
>>> b
[ ['abc'], ['abc'], ['abc'], ['abc'], ['abc'])
Run Code Online (Sandbox Code Playgroud)

为什么要append更改所有子列表?就是insert()在这种情况下更好?

Ank*_*kan 7

当你这样做时[[]] * 5,重复5次的是相同对象(这里为空列表)的列表.

你可以通过以下方式检查:

>>> b = [[]] *5

>>> b
[[], [], [], [], []]

>>> id(b[0])
140588316211896

>>> id(b[1])
140588316211896
Run Code Online (Sandbox Code Playgroud)

你需要做的是:

>>> b = [[] for i in range(5)]
>>> b[0].append('abc')
>>> b
[['abc'], [], [], [], []]
Run Code Online (Sandbox Code Playgroud)

[[] for i in range(5)]每个循环中,创建一个新的空列表对象.

插入在这里不是一个好选择,因为insert是一个O(n)操作,而append将是O(1).