【发布时间】:2014-12-01 18:11:16
【问题描述】:
我应该;
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)
或:
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)
更重要的是,这重要吗?首先,a 中的元素是否已释放,它们的引用计数是否为 0?或者程序是否仍然需要对它的引用。如果是这样,我将完全覆盖第二个示例中的引用。
【问题讨论】:
-
如果 old_list 未定义,“old_list = filter(lambda x: x not in a, old_list)”将如何工作?
-
a[:] = range(200)更改绑定到a的同一列表的内容(假设 Python 2 其中range返回一个列表),但 not 将a重新绑定到一个新的列表/对象。如果这个“重要”取决于其他使用a(更重要的是,之前绑定的对象)以及预期的行为。 (没有其他要求,我使用第一种形式,避免意外的副作用。) -
我想补充一下,我真的不知道你想做什么,你能提供一个输入/输出的例子吗? (将 100 替换为 3 和 200 替换为 6)
-
是的,它是 Python 2。假设 old_list 已定义。这是一个在下面完美回答的重新分配问题。