在Python中重新分配列表的正确方法是什么?

Mar*_*1ni 0 python list

我是不是该;

a = range(100)
old_list = filter(lambda x: x not in a, old_list)
a = range(200)
old_list = filter(lambda x: x not in a, old_list)
Run Code Online (Sandbox Code Playgroud)

要么:

a = range(100)
old_list = filter(lambda x: x not in a, old_list)
a[:] = range(200)
old_list = filter(lambda x: x not in a, old_list)
Run Code Online (Sandbox Code Playgroud)

更重要的是,它重要吗?在第一个,是一个被释放的元素,是他们的引用计数0?或者程序仍然需要引用它.如果是这样,我完全覆盖了第二个例子中的引用.

NPE*_*NPE 5

两种方式都有效.它们之间有一个微妙的区别:

  • 第一个创建一个全新的列表对象a.
  • 第二个替换现有列表对象中的所有元素a.

以下两个片段展示了不同之处:

# #1
a = range(3)
b = a
a = range(5)
print b

# #2
a = range(3)
b = a
a[:] = range(5)
print b
Run Code Online (Sandbox Code Playgroud)

第一个打印出来

[0, 1, 2]
Run Code Online (Sandbox Code Playgroud)

而第二个打印出来

[0, 1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)