使用明确的dictonary或set方法是否有性能优势?

时间:2017-09-07 21:05:34

标签: python

我刚刚发现Python字典和集合都有def edit(item_list): pos = int(input("Number: ")) new_value = input("Updated name: ") item_list[pos-1] = new_value print"%s was updated" % (new_value) 方法。该方法实际上只是从对象中删除所有条目。

有没有充分的理由,甚至情况,有必要拨打clear而不是foo.clear()foo = {}

我可以想象它可能更有效地用于垃圾收集,但它似乎违反了#34; 应该有一个 - 最好只有一个 - 显而易见的方法。& #34;

3 个答案:

答案 0 :(得分:4)

可能有对此对象的其他引用。如果用新对象替换引用,其他引用仍将指向原始字典/集。

答案 1 :(得分:3)

当您对同一个设置对象有多个引用时,只有clear()可以清空该组而无需重新分配。

比较

>>> def clear(s):
...     s.clear()
...
>>> def clear_assignment(s):
...     s = set()
...
>>> foo = {'bar', 'baz'}
>>> clear_assignment(foo)
>>> foo
{'baz', 'bar'}
>>> clear(foo)
>>> foo
set()

分配将一个名称重新绑定到新的set()对象,而set.clear()从可变对象中删除所有内容而不重新分配,因此您可以继续使用其他引用那套。

答案 2 :(得分:0)

foo = {}不会删除对象,只是将foo引用到一个新的空对象(如果其他变量仍然引用它,旧的仍然存在)。
因此,foo.clear()具有内存效率,这是最好的方法。