我应该;
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)
更重要的是,这有关系吗?在第一个,是一个被释放的元素,是他们的引用计数0?或者程序仍然需要引用它。如果是这样,我完全覆盖了第二个例子中的引用。
答案 0 :(得分: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
第一个打印
[0, 1, 2]
而第二个打印
[0, 1, 2, 3, 4]
答案 1 :(得分:0)
根据我的问题,这似乎有所帮助 第一个问题: -
old_list = tuple(range(110))
a = range(100)
old_list = filter(lambda x: x not in a, old_list)
print id(a)
a = range(200)
old_list = filter(lambda x: x not in a, old_list)
print id(a)
输出是: -
140412939507040
140412939380568
第二个问题: -
a = range(100)
old_list = filter(lambda x: x not in a, old_list)
print id(a)
a[:] = range(200)
old_list = filter(lambda x: x not in a, old_list)
print id(a)
输出是: -
140295816890632
140295816890632
第一次id
被释放,但第二次保持不变。
在第二个问题中,您只是将数据复制到a。的索引中。