Python是否具有与std :: move类似的功能?

时间:2018-05-15 12:53:46

标签: python python-3.x

>>> cache = {}
>>> cache['1'] = 'long string'
>>> cache['2'] = 'very long string'
>>> buffer = {}
>>> buffer['1'] = cache['1']
>>> del cache['1']
>>> buffer['2'] = cache['2']
>>> del cache['2']
>>> cache
{}
>>> buffer
{'1': 'long string', '2': 'very long string'}

我有两个大词典(即缓存和缓冲区)。我需要定期将内容从cache移至buffer,然后从cache中删除复制的项目。

Python是否提供与C ++ 11 std :: move类似的功能,以便我不必为该项目制作额外的副本,以后会删除?

根据@JETM

的评论进行了更新
>>> cache = {}
>>> cache['1'] = 'long string2'
>>> buffer['1'] = cache['1']
>>> id(buffer['1'])
139639957636576
>>> id(cache['1'])
139639957636576
>>> del cache['1']
>>> id(buffer['1'])
139639957636576

看起来缓存[' 1']的值不会被复制到缓冲区[' 1']。

1 个答案:

答案 0 :(得分:3)

在这种特殊情况下,您可以使用dict.pop

buffer['1'] = cache.pop('1')

值得注意的是,在Python对象中,指针更像是同义词;也就是说,当您执行此副本时,没有数据重复,您只需在buffer中添加对该对象的引用,并从cache中删除对该引用的引用。也就是说,只复制指针