代码之家  ›  专栏  ›  技术社区  ›  tshepang Arrie

“d.clear()”和“d={}”之间的区别

  •  4
  • tshepang Arrie  · 技术社区  · 14 年前

    在我的机器上 d.clear() d={} 是超过100纳秒,所以我很好奇为什么一个会用一个超过另一个。

    import timeit
    
    def timing():
        d = dict()
    
    if __name__=='__main__':
        t = timeit.Timer('timing()', 'from __main__ import timing')
        print t.repeat()
    
    2 回复  |  直到 14 年前
        1
  •  6
  •   wisty    14 年前

    d={}

    d.clear() 清除字典。

    如果你使用 d={} ,然后任何指向 d 将指向旧的 d . 这可能会引入错误。

    d、 清除() ,然后任何指向 d

    而且,我不认为 将(在CPython中)释放 d . 为了表现,CPython 当您删除元素时,从字典中移除内存,因为字典的通常用途是构建一个大字典,并且 删掉一些元素。在大多数用例中,重新分配内存(并确保哈希表保持一致)会花费太长时间。相反,它在字典里填满了 turds (这是邮件列表上的技术术语),表示元素曾经存在,但后来被删除了。我不完全确定 d、 清除()

        2
  •  19
  •   Mark Byers    14 年前

    不同的是 d = {} 创建新词典并 d.clear() 把你已有的字典清空就行了。如果代码中有其他地方存放对词典的引用,那么这种细微的差异就很重要。在第一种情况下,这些其他对象不会看到任何更改,因为您没有修改原始字典。下面的代码显示了这种不同的作用。

    创建新词典:

    >>> d = {'foo': 'bar'}
    >>> d2 = d
    >>> d = {}
    >>> d2
    {'foo': 'bar'}
    

    >>> d = {'foo': 'bar'}
    >>> d2 = d
    >>> d.clear()
    >>> d2
    {}