python 字典的copy()方法表面看就是深copy啊,明显独立

 d = {'a':1, 'b':2}
c = d.copy()
print('d=%s c=%s' % (d, c))

Code1

结果:

d={'a': 1, 'b': 2}  c={'a': 1, 'b': 2}

修改d,看看c变化没有。

 d['a']=3
print('d=%s c=%s' % (d, c))

Code2

结果:

d={'a': 3, 'b': 2}  c={'a': 3, 'b': 2}

这里仍然是相同的

再改:

 d = {'b': 2, 'a': 3, 'c': ['a', 'c']}
b = d.copy()
print('d=%s b=%s' % (d, b))

Code3

 d['c'] = ['a','c', 'shallow']
print('d=%s b=%s' % (d, b))

Code4

code4 中重新对d['c']赋值了,发现结果是不相同的

d={'a': 3, 'c': ['a', 'c', 'shallow'], 'b': 2} b={'a': 3, 'c': ['a', 'c'], 'b': 2}

但是,这里的修改是重新赋值,如果直接对其进行修改呢?

 d = {'b': 2, 'a': 3, 'c': ['a', 'c']}
b = d.copy() d['c'].append(123)
print('d=%s b=%s' % (d, b))

Code5

结果:

d={'b': 2, 'c': ['a', 'c', 123], 'a': 3} b={'b': 2, 'c': ['a', 'c', 123], 'a': 3}

发现两者并不是完全独立的,这就是“浅拷贝”的由来。

那么,问题来了:为什么对d重新赋值时c没有改变,而对d直接修改时c又改变了呢?

说到底还是python的机制问题,因为赋值操作都是在引用。

开始d,c引用同一个字典,当对d重新赋值后,c还指向原来的字典,但d引用已经改变,所以两都独立。

但是,当我在原字典的基础上直接修改c的value值(一个列表)。

此时d,c仍然那个字典,所以两者都改变了。

python字典copy()方法的更多相关文章

  1. Python 字典 copy()方法

    描述 Python 字典 copy() 方法返回一个字典的浅拷贝(父不变,子变). 语法 copy() 方法语法: D.copy() 参数 无. 返回值 返回一个字典的浅拷贝(父不变,子变). 实例 ...

  2. Python 字典 fromkeys()方法

    Python 字典 fromkeys() 方法用于创建一个新的字典,并以可迭代对象中的元素分别作为字典中的键,且所有键对应同一个值,默认为None. fromkeys() 方法语法: 1 dict.f ...

  3. Python 字典 popitem() 方法

    描述 Python 字典 popitem() 方法随机返回并删除字典中的一个键/值对(一般删除末尾对). 如果字典已经为空,却调用了此方法,就报出KeyError异常. 语法 popitem() 方法 ...

  4. Python 字典 pop() 方法

    描述 Python 字典 pop() 方法删除给定键所对应的键/值对,并返回被删除的值.给定键如果不在字典中,则必须设置一个default值,否则会报错,此时返回的就是default值. 语法 pop ...

  5. Python 字典 values() 方法

    描述 Python 字典 values() 方法以列表形式(并非直接的列表,若要返回列表值还需调用list函数)返回字典中的所有值. 语法 values() 方法语法: D.values() 参数 无 ...

  6. Python 字典 update() 方法

    描述 Python 字典 update() 方法用于更新字典中的键/值对,可以修改存在的键对应的值,也可以添加新的键/值对到字典中. 用法与 Python dict() 函数相似. 语法 update ...

  7. Python 字典 keys() 方法

    描述 Python 字典 keys() 方法以列表形式(并非直接的列表,若要返回列表值还需调用list函数)返回字典中的所有的键. 语法 keys() 方法语法: D.keys() 参数 无. 返回值 ...

  8. Python 字典 items() 方法

    描述 Python 字典 items() 方法以列表形式(并非直接的列表,若要返回列表值还需调用list函数)返回可遍历的(键, 值) 元组数组. 语法 items() 方法语法: D.items() ...

  9. Python 字典 clear()方法

    描述 Python 字典 clear() 方法用于删除字典内所有元素. 语法 clear() 方法语法: D.clear() 参数 无. 返回值 该方法没有任何返回值. 实例 以下实例展示了 clea ...

随机推荐

  1. 【Reporting Services 报表开发】— 表达式

    一.常用的SSRS原始函数可以打开文本框的表达式中看到,如图1 图1 如下为SSRS中设计报表时常用的运算函数: 运算符/函数 说明 + 前后位数字则为加法,前后为字符串则为链接符号 - 数值减法 * ...

  2. 如何在ExtJS 6中使用Fashion美化应用程序

    在Ext JS 6,一个最大的改变就是框架合并,使用一个单一的代码库,就可以为每一种设备开发各具有良好体验的最好应用程序.它还带来了一种美化应用程序的新方式. 在本文,重点是Sencha Fashio ...

  3. My second "last working day"

    时间真快,转眼硕士毕业已经快8年了. 今天是我的第二个last working day.也是我即将结束在外企工作的节点. 说来,毕业的时候,找工作,在确定了最后要去的单位之前,手头已经拿过了10家单位 ...

  4. 用Bouncy Castle的C#版API产生公钥和私钥

    开源API链接地址:The Legion of the Bouncy Castle Bouncy Castle,简称为BC,原本是java的一个开源JCE提供者,后来也提供了C#版本的API,我下载其 ...

  5. SPOJ #691. Hotel Floors

    A typical flood-fill algorithm application (BFS). Not very complex, except only 1 tip: instead of se ...

  6. 水晶报表(web)表格信息展示

    一.环境安装 开发工具使用VS2010+SAP Crystal Reports13_0+.NETformwork4.0 因为vs2010已经不再集成水晶报表,所以需要我们去找合适的版本下载http:/ ...

  7. Android框架

    http://blog.163.com/vicent_zxb/blog/static/1858861312011488262665/ (一)Android系统框架详解 Android采用分层的架构,分 ...

  8. postgresql plpythonu例子

    以下代码仅作为参考之用 select md5, crc32, record->'UserModerAnalysis'->'base_info'->'file_malware' as ...

  9. jsch ssh服务器调用Linux命令或脚本的小问题

    代码如下: public static boolean execshell(String command, String user, String passwd, String host) throw ...

  10. PLSQL_Oracle Object所有数据库对象类型汇总和简解(概念)

    Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable ...