python – 是否有“中等”镜头这样的东西?或者:如何精细控制副本的“深度”?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 是否有“中等”镜头这样的东西?或者:如何精细控制副本的“深度”?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1318字,纯文字阅读大概需要2分钟。
内容图文
![python – 是否有“中等”镜头这样的东西?或者:如何精细控制副本的“深度”?](/upload/InfoBanner/zyjiaocheng/796/48cbd705399643498cdff9cd1d1905a3.jpg)
我有一本字典.字典键是整数,值是对象列表.
我希望能够以这样的方式复制字典,即我引用完全相同的对象,但不同的列表.
当我使用普通副本 – dict.copy()或copy.copy(dict)时 – 我对复制字典中的列表所做的任何更改也会更改原始字典的列表.
但是,当我使用copy.deepcopy(dict)时,它会一直运行并创建新对象,因此我不能将原始字典的列表用作“待办事项”,因为我从中移除特定对象复制字典的列表,或对复制的字典列表进行任何其他类型的更改,这些更改需要与原始对象进行比较.
关于“复制”模块(https://docs.python.org/2/library/copy.html)的文档似乎没有提及任何类型的中间选项,或某种方式来调整深度.
是否存在这样的选项或功能?如果没有,我只是从错误的角度思考问题?例如,我想我可能能够实现所需的行为,如果我遍历字典并手动“复制”那样的东西(但这似乎相当冗长!?).
解决方法:
您可以实现自己的“中型”版本:
import copy
def mediumcopy(value):
return dict(
(key, copy.copy(val))
for key, val in value.iteritems())
z = {'a': [[1], [2]]}
zcopy = mediumcopy(z)
assert id(z) != id(zcopy) # True
assert id(z['a']) != id(zcopy['a']) # True
assert id(z['a'][0]) == id(zcopy['a'][0]) # True
Python 3版本:
def mediumcopy(value):
return {key: list(val) # you can still use copy.copy here
for key, val in value.items()}
z = {'a': [[1], [2]]}
zcopy = mediumcopy(z)
assert id(z) != id(zcopy) # True
assert id(z['a']) != id(zcopy['a']) # True
assert id(z['a'][0]) == id(zcopy['a'][0]) # True
内容总结
以上是互联网集市为您收集整理的python – 是否有“中等”镜头这样的东西?或者:如何精细控制副本的“深度”?全部内容,希望文章能够帮你解决python – 是否有“中等”镜头这样的东西?或者:如何精细控制副本的“深度”?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。