python字典copy()方法
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()方法的更多相关文章
- Python 字典 copy()方法
描述 Python 字典 copy() 方法返回一个字典的浅拷贝(父不变,子变). 语法 copy() 方法语法: D.copy() 参数 无. 返回值 返回一个字典的浅拷贝(父不变,子变). 实例 ...
- Python 字典 fromkeys()方法
Python 字典 fromkeys() 方法用于创建一个新的字典,并以可迭代对象中的元素分别作为字典中的键,且所有键对应同一个值,默认为None. fromkeys() 方法语法: 1 dict.f ...
- Python 字典 popitem() 方法
描述 Python 字典 popitem() 方法随机返回并删除字典中的一个键/值对(一般删除末尾对). 如果字典已经为空,却调用了此方法,就报出KeyError异常. 语法 popitem() 方法 ...
- Python 字典 pop() 方法
描述 Python 字典 pop() 方法删除给定键所对应的键/值对,并返回被删除的值.给定键如果不在字典中,则必须设置一个default值,否则会报错,此时返回的就是default值. 语法 pop ...
- Python 字典 values() 方法
描述 Python 字典 values() 方法以列表形式(并非直接的列表,若要返回列表值还需调用list函数)返回字典中的所有值. 语法 values() 方法语法: D.values() 参数 无 ...
- Python 字典 update() 方法
描述 Python 字典 update() 方法用于更新字典中的键/值对,可以修改存在的键对应的值,也可以添加新的键/值对到字典中. 用法与 Python dict() 函数相似. 语法 update ...
- Python 字典 keys() 方法
描述 Python 字典 keys() 方法以列表形式(并非直接的列表,若要返回列表值还需调用list函数)返回字典中的所有的键. 语法 keys() 方法语法: D.keys() 参数 无. 返回值 ...
- Python 字典 items() 方法
描述 Python 字典 items() 方法以列表形式(并非直接的列表,若要返回列表值还需调用list函数)返回可遍历的(键, 值) 元组数组. 语法 items() 方法语法: D.items() ...
- Python 字典 clear()方法
描述 Python 字典 clear() 方法用于删除字典内所有元素. 语法 clear() 方法语法: D.clear() 参数 无. 返回值 该方法没有任何返回值. 实例 以下实例展示了 clea ...
随机推荐
- c# 可以设置透明度的 Panel 组件
using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; u ...
- 05文件与IO
这节主要学习了read.write.lseek.目录访问(opendir.readdir.closedir)这几个系统调用及其简单的应用. 一旦有了与一个打开文件描述相连的文件描述符,只要该文件是用O ...
- 创建UIImage的两种方法
1. UIImage *img = [UIImage imageNamed:@"imageName"]; 2. NSString *imageFilePath = [[NSBund ...
- jQuery 工具类库集锦
备注:待验证. ...................................以下待验证................................ 今天度娘发现这个内容,原来我一直做的都 ...
- SPOJ #500. Turbo Sort
Sorting is not an out-dated topic. My own in-place qsort got TLE... so, I simply called stl::sort() ...
- (转)jQuery禁止右键菜单,全选
本文转载自:http://www.cnblogs.com/lucker/archive/2012/09/21/2696464.html $("body").bind("c ...
- iphone Dev 开发实例8: Parsing an RSS Feed Using NSXMLParser
From : http://useyourloaf.com/blog/2010/10/16/parsing-an-rss-feed-using-nsxmlparser.html Structure o ...
- Service代码示例
package com.homily.training.service; import android.app.Service; import android.content.Intent; impo ...
- ADF_Advanced ADF系列1_Fusion应用的客制和个性化(Part1)
2015-02-17 Created By BaoXinjian
- DBA_Oracle基本体系内存和进程结构(概念)
2014-08-05 Created By BaoXinjian