Python基础教程(第2版)学习笔记_016:第4章 字典(续3)
时间:2011-03-21
来源:谢晖
2、copy方法
copy方法返回一个具有相同键-值对的新字典[这种方法叫做浅复制(shallow copy)],因为值本身就是相同的,并不是副本。
当在副本中(上句怎么说并不是副本呢?)对值进行替换时,并不会影响原始字典,但如果对值进行修改,却会影响原始字典,这就有个问题了:替换与修改有什么区别?现在的理解是:替换只是原地修改,不改变的字典键-值的个数;但修改却是意味着要改变字典的键-值的个数,比如添加、删除等操作。
>>> x={'xiehui':'6668','xietongxin':['6667','6665','6669']}
>>> x
{'xietongxin': ['6667', '6665', '6669'], 'xiehui': '6668'}
>>> y=x.copy()
>>> y
{'xietongxin': ['6667', '6665', '6669'], 'xiehui': '6668'}
>>> y['xiehui']='33751'
>>> y
{'xietongxin': ['6667', '6665', '6669'], 'xiehui': '33751'}
>>> x
{'xietongxin': ['6667', '6665', '6669'], 'xiehui': '6668'}
>>> y['xietongxin'].remove('6669')
>>> y
{'xietongxin': ['6667', '6665'], 'xiehui': '33751'}
>>> x
{'xietongxin': ['6667', '6665'], 'xiehui': '6668'}
>>>
阅读上面的程序,参照前面的说明应该可以读懂。
那如何避免这种现象的出现呢?毕竟有时候我们还是习惯复制结束后,对新字典的任何修改都不想让它再与原始字典发生任何联系!
使用deepcopy函数(深度复制),但需要先导入copy模块的深度复制函数
>>> x={'xiehui':'6668','xietongxin':['6667','6665','6669']}
>>> from copy import deepcopy
>>> y=deepcopy(x)
>>> y
{'xietongxin': ['6667', '6665', '6669'], 'xiehui': '6668'}
>>> y['xiehui'].remove('6668')
Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
y['xiehui'].remove('6668')
AttributeError: 'str' object has no attribute 'remove'
>>> y['xietongxin'].remove('6669')
>>> y
{'xietongxin': ['6667', '6665'], 'xiehui': '6668'}
>>> x
{'xietongxin': ['6667', '6665', '6669'], 'xiehui': '6668'}
>>>
可以读懂吗?
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28