正在打印的两个 id 是不同的,不应该是相同的,它是一个可变对象。但是当我使用 list 的 append 方法添加 4 时,id 是相同的
茅侃侃
浏览 161回答 1
1回答
慕码人8056858
虽然列表是可变的,但这并不意味着所有涉及它们的操作都会改变列表。在您的示例中,您正在L + [4]连接两个列表。在list.__add__那个被调用执行该方法创建一个新的列表,而不是修改L。您将旧名称绑定L到新列表,因此您从id(L)更改中获得的值。如果您想L在向末尾添加值的同时进行变异,有几种方法可以做到。L.append(4)如果您只需要添加一个项目,这是显而易见的选择。L.extend([4])或者L += [4]如果第二个列表中的项目多于一个,则几乎同义的可以工作。请注意,有时您想要创建一个新列表!如果想要保留对旧列表的未修改引用,可能需要在添加新值的同时创建一个包含其大部分内容的新列表。虽然您可以复制列表,然后使用我上面提到的一种就地方法,但您也可以同时使用+复制值并将值添加到列表中(只需将结果绑定到新名称):L = [1, 2, 3]M = L + [4] # this is more convenient than M = list(L); M.append(4)print(L) # unchanged, still [1, 2, 3]print(M) # new list [1, 2, 3, 4]