在我的机器上,执行速度d.clear()和之间的执行速度d={}超过100ns,所以很奇怪为什么会使用一个而不是另一个.
import timeit
def timing():
d = dict()
if __name__=='__main__':
t = timeit.Timer('timing()', 'from __main__ import timing')
print t.repeat()
Run Code Online (Sandbox Code Playgroud)
Mar*_*ers 19
不同之处在于d = {}创建一个新词典并d.clear()清空您已有的词典.如果您的代码中有其他位置包含对词典的引用,则这种细微差别很重要.在第一种情况下,由于您尚未修改原始字典,因此其他对象将看不到任何更改.以下代码显示了这种差异.
创建一个新词典:
>>> d = {'foo': 'bar'}
>>> d2 = d
>>> d = {}
>>> d2
{'foo': 'bar'}
Run Code Online (Sandbox Code Playgroud)
清除现有字典:
>>> d = {'foo': 'bar'}
>>> d2 = d
>>> d.clear()
>>> d2
{}
Run Code Online (Sandbox Code Playgroud)
d={} 创建一个新词典.
d.clear() 清除字典.
如果你使用d={},那么指向的任何东西d都将指向旧的d.这可能会引入一个错误.
如果您使用d.clear(),那么指向的任何内容d现在将指向已清除的字典,如果这不是您想要的,这也可能会引入错误.
另外,我不认为d.clear()(在CPython中)会释放占用的内存d.为了提高性能,当你删除元素时,CPython 不会从字典中删除内存,因为字典的通常用法是构建一个大字典,并且可能修剪掉一些元素.重新分配内存(并确保哈希表保持一致)在大多数用例中花费的时间太长.相反,它填充字典turds(这是邮件列表上的技术术语),表明一个元素曾经存在,但自从被删除.我不完全确定是否d.clear()这样做,但一个接一个地删除所有键确实如此.
| 归档时间: |
|
| 查看次数: |
702 次 |
| 最近记录: |