在我的机器上,执行速度介于d.clear()
和之间,d={}
超过 100ns,所以我很好奇为什么一个人会使用另一个。
import timeit
def timing():
d = dict()
if __name__=='__main__':
t = timeit.Timer('timing()', 'from __main__ import timing')
print t.repeat()
不同之处在于d = {}
创建一个新字典并d.clear()
清空您已有的字典。如果您的代码中有其他地方包含对您的字典的引用,那么这种细微的差异很重要。在第一种情况下,其他对象不会看到任何变化,因为您没有修改原始字典。以下代码显示了这种操作差异。
创建一个新字典:
>>> d = {'foo': 'bar'}
>>> d2 = d
>>> d = {}
>>> d2
{'foo': 'bar'}
清除现有字典:
>>> d = {'foo': 'bar'}
>>> d2 = d
>>> d.clear()
>>> d2
{}
d={}
创建一个新字典。
d.clear()
清除字典。
如果你使用d={}
,那么任何指向的东西d
都会指向旧的d
。这可能会引入一个错误。
如果你使用d.clear()
,那么任何指向的东西d
现在都会指向已清除的字典,如果这不是你想要的,这也可能会引入一个错误。
另外,我认为d.clear()
(在 CPython 中)不会释放d
. 出于性能考虑,当您删除元素时,CPython不会从字典中占用内存,因为字典的通常用途是构建一个大字典,并且可能会删除一些元素。在大多数用例中,重新分配内存(并确保哈希表保持一致)会花费很长时间。相反,它用(这是邮件列表上的技术术语)填充字典turds
,这表明一个元素曾经在那里,但后来被删除了。我不完全确定是否d.clear()
这样做,但肯定会一一删除所有键。