Python 字典一个易犯的错误
一个易犯的错误,关于 Python 的传值(对于不可变量) 和 传引用(对于可变量),浅拷贝和深拷贝。废话不多说,看例子,
直接改变可变字典值,失败,
>>> dic = dict.fromkeys(range(5), [])
>>> dic
{0: [], 1: [], 2: [], 3: [], 4: []}
>>> dic[0]
[]
>>> dic[0].append(123)
>>> dic
{0: [123], 1: [123], 2: [123], 3: [123], 4: [123]}
>>>
间接改变可变字典值,失败。
>>> dic = dict.fromkeys(range(5), [])
>>> dic
{0: [], 1: [], 2: [], 3: [], 4: []}
>>> v = dic[0]
>>> v
[]
>>> v.append(123)
>>> v
[123]
>>> dic
{0: [123], 1: [123], 2: [123], 3: [123], 4: [123]}
切片浅拷贝,对于非嵌套可变字典值,赋单值,成功,
>>> dic = dict.fromkeys(range(5), [])
>>> dic
{0: [], 1: [], 2: [], 3: [], 4: []}
>>> v = dic[0][:]
>>> v
[]
>>> v.append(123)
>>> v
[123]
>>> dic
{0: [], 1: [], 2: [], 3: [], 4: []}
>>>
>>> dic[0] = v
>>> dic
{0: [123], 1: [], 2: [], 3: [], 4: []}
切片浅拷贝,对于非嵌套可变字典值,赋可变列表,成功,
>>> dic = dict.fromkeys(range(5), [])
>>> dic
{0: [], 1: [], 2: [], 3: [], 4: []}
>>> v = dic[0][:]
>>> v.append([1, 2, 3])
>>> v
[[1, 2, 3]]
>>>
>>> dic[0] = v
>>> dic
{0: [[1, 2, 3]], 1: [], 2: [], 3: [], 4: []}
copy.copy 浅拷贝,成功,
>>> dic = dict.fromkeys(range(5), [])
>>> dic
{0: [], 1: [], 2: [], 3: [], 4: []}
>>>
>>> v = copy.copy(dic[0]) # shallow copy
>>> v
[]
>>> v.append([1, 2, 3])
>>> v
[[1, 2, 3]]
>>>
>>> dic[0] = v
>>> dic
{0: [[1, 2, 3]], 1: [], 2: [], 3: [], 4: []}
>>>
copy.deepcopy 深拷贝,成功,这个最靠谱。
>>> dic = dict.fromkeys(range(5), [])
>>> dic
{0: [], 1: [], 2: [], 3: [], 4: []}
>>>
>>> v = copy.deepcopy(dic[0])
>>> v
[]
>>> v.append([1, 2, 3])
>>> v
[[1, 2, 3]]
>>>
>>> dic[0] = v
>>> dic
{0: [[1, 2, 3]], 1: [], 2: [], 3: [], 4: []}
>>>
完。
Python 字典一个易犯的错误的更多相关文章
- javascript中易犯的错误有哪些
javascript中易犯的错误有哪些 一.总结 一句话总结: 比如循环中函数的使用 函数中this的指向谁(函数中this的使用) 变量的作用域 1.this.timer = setTimeout( ...
- Python初学的易犯错误
当初学 Python 时,想要弄懂 Python 的错误信息的含义可能有点复杂.这里列出了常见的的一些让你程序 crash 的运行时错误. 1)忘记在 if , elif , else , for , ...
- 关于TextView的setText()与Integer之间一个易犯的小错误
[转载]原文:https://my.oschina.net/xybob/blog/59524 先上图: TextView的setText()函数的两个重载函数 因为TextView有两个不同的重载函数 ...
- python开发中容易犯的错误整合
写在前面 长期更新的博文.多数是一些比较隐蔽的问题.欢迎留言补充. pip并不是那么安逸 pip安装对于开发者来说确实是一种解放.可以自动安装依赖包,但执行最简单的pip安装命令时,并不是所有的依赖都 ...
- js函数易犯的错误
1.定义一个js函数时不能写在另一个函数里面. 2.定义一个打开网页自动执行的函数,一定要注意加载的顺序.如果是不是自动执行的,而是等页面加载完后事件触发的,那写在任何地方都没问题. 错误的:
- 初学者刚学c++在定义类时只有成员变量易犯的错误
------------------------ #include<iostream> using namespace std;//c++的命名空间 class circle { publ ...
- jquery初学者易犯的错误
1 获取类或者对象的时候,忘记写“#”或者“.” 错误案例: $(document).ready(function(){ $("btn1").click(function(){ a ...
- php一些易犯的错误
1.mysql数据库字段是区分大小写的.字段在数组中要小写.(数据库字段UE_account) 错误的:
- iOS定位权限请求时易犯的错误小结
起因 用户群反馈app可能请求了不合适的定位权限:始终定位. 看到这个截图,根据经验判断可能是后台定位功能导致可能不得不请求始终定位权限.再加上之前提交审核时,苹果要求在plist文件中新增NSLoc ...
随机推荐
- CSS3 画基本图形,圆形、椭圆形、三角形等
CSS3圆角#css3-circle{ width: 150px; height: 150px; border-radius: 50%; }CSS3 椭圆形css3 radius#css3-elips ...
- 16-pymysql模块的使用
[转]16-pymysql模块的使用 本节重点: pymysql的下载和使用 execute()之sql注入 增.删.改:conn.commit() 查:fetchone.fetchmany.fetc ...
- K8S 通过 yaml 文件创建资源
创建 pod cd ~ vi pod-demo.yaml # 内容如下 apiVersion: v1 kind: Pod metadata: name: pod-demo namespace: def ...
- 系统调用syscall---用户态切换到内核态的唯一途径
1.应用程序有时需要内核协助完成一些处理,但是应用程序不可能执行内核代码(主要是安全性考虑), 那么,应用程序需要有一种机制告诉内核,它现在需要内核的帮助,这个机制就是系统调用. 2.系统调用的本质是 ...
- 转载------35岁开始转变的观念(干了这碗鸡汤再写代码保证没有bug)
作为一个标准的IT男,从一开始的一线开发,做到管理层,又因为喜爱开发,跳槽继续专注coding,一干就是10多年.有时候就想,这样一直学习,coding,如果能干到老也挺不错的! 不过生活的压力是不会 ...
- Javascript 对象 - 字符串对象
字符串对象 字符串对象是JavaScript中比较常见的一种基本数据类型,他封装了一个字符串,并且提供了相应的方法.例如连接字符串.取字符串.分割字符串等.JavaScript中字符串是不可变的,原始 ...
- 微信小程序中如何获取for循环的item相关值到JS页面的问题
今天小程序开发过程中,遇到了这个棘手的问题.由于我没有前端基础,只是知道一点儿基本的HTML标签,所以卡了好久,特此分享,望后来的你,可以有所收获. measure step 1 *.WXML: ...
- IT真的是万能的吗?
朋友最近郁闷了,作为企业信息化主管的他最近经常听到的一句话就是:IT是万能的,不能拒绝用户的任何需求.这句话如果是普通用户私下开玩笑说说也就罢了,但现在演变成了老板在会议场合不止一次这么说,那就让人匪 ...
- VMware虚拟机安装CentOS系统图文教程
上一篇:VMware虚拟机安装教程详解图文 上一篇文章给大家介绍了虚拟机的安装,本文为大家详细介绍一下如何在虚拟机安装CentOS系统: 一:VMware虚拟机创建: 1:打开 ...
- HBase最佳实践之Scan
一.简介 HBase中Scan从大的层面来看主要有三种常见用法:ScanAPI.TableScanMR以及SnapshotScanMR.三种用法的原理不尽相同,扫描效率当然相差甚远,最重要的是这几种用 ...