>>> 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']。
答案 0 :(得分:3)
在这种特殊情况下,您可以使用dict.pop
:
buffer['1'] = cache.pop('1')
值得注意的是,在Python对象中,指针更像是同义词;也就是说,当您执行此副本时,没有数据重复,您只需在buffer
中添加对该对象的引用,并从cache
中删除对该引用的引用。也就是说,只复制指针。