Python面试题之copy/deepcopy详解
copy和deepcopy有什么区别?
http://blog.csdn.net/qq_32907349/article/details/52190796
http://iaman.actor/blog/2016/04/17/copy-in-python
我们寻常意义的复制就是深复制,即将被复制对象完全再复制一遍作为独立的新个体单独存在。所以改变原有被复制对象不会对已经复制出来的新对象产生影响。
而浅复制并不会产生一个独立的对象单独存在,他只是将原有的数据块打上一个新标签,所以当其中一个标签被改变的时候,数据块就会发生变化,另一个标签也会随之改变。这就和我们寻常意义上的复制有所不同了。
对于简单的 object,用 shallow copy 和 deep copy 没区别
复杂的 object, 如 list 中套着 list 的情况,shallow copy 中的 子list,并未从原 object 真的「独立」出来。也就是说,如果你改变原 object 的子 list 中的一个元素,你的 copy 就会跟着一起变。这跟我们直觉上对「复制」的理解不同。
import copy
# a = 123
# b = 123
# c = a
# print(id(a))
# print(id(b))
# print(id(c))
# 1345408560
# 1345408560
# 1345408560 # a1 = copy.copy(a)
# a2 = copy.deepcopy(a)
# print(id(a1))
# print(id(a2))
# 1345408560
# 1345408560 # n1 = {'k1':123,'k2':'abc','k3':[1,'bv']}
# # n2 = n1
# n2 = copy.copy(n1)
# # n2 = copy.deepcopy(n1)
# print(id(n1))
# print(id(n2))
# n2['k3'][0] = 3
# print(n2)
# print(n1)
# print(id(n1))
# print(id(n2))
# 16596928
# 16642096
# {'k1': 123, 'k2': 'abc', 'k3': [3, 'bv']}
# {'k1': 123, 'k2': 'abc', 'k3': [3, 'bv']}
# 16596928
# 16642096 # n1 = {'k1':123,'k2':'abc','k3':[1,'bv']}
# n2 = n1
# n2 = copy.copy(n1)
# n2 = copy.deepcopy(n1)
# print(id(n1))
# print(id(n2))
# n2['k3'][0] = 3
# print(n2)
# print(n1)
# print(id(n1))
# print(id(n2))
# print(id(n1['k3']))
# print(id(n2['k3']))
# 51986368
# 53434384
# {'k1': 123, 'k2': 'abc', 'k3': [3, 'bv']}
# {'k1': 123, 'k2': 'abc', 'k3': [1, 'bv']}
# 51986368
# 53434384
# 53427456
# 53427496 dic = {
'cpu':[80,],
'mem':[80,],
'hdd':[80,],
} new_dic = copy.deepcopy(dic)
print(dic)
print(new_dic)
# {'cpu': [80], 'mem': [80], 'hdd': [80]}
# {'cpu': [80], 'mem': [80], 'hdd': [80]}
print("*"*60)
new_dic['cpu'][0] = 70
print(dic)
print(new_dic) # new_dic = copy.copy(dic)
# {'cpu': [80], 'mem': [80], 'hdd': [80]}
# {'cpu': [80], 'mem': [80], 'hdd': [80]}
# ************************************************************
# {'cpu': [70], 'mem': [80], 'hdd': [80]}
# {'cpu': [70], 'mem': [80], 'hdd': [80]} # new_dic = copy.deepcopy(dic)
# {'cpu': [80], 'mem': [80], 'hdd': [80]}
# {'cpu': [80], 'mem': [80], 'hdd': [80]}
# ************************************************************
# {'cpu': [80], 'mem': [80], 'hdd': [80]}
# {'cpu': [70], 'mem': [80], 'hdd': [80]}
Python面试题之copy/deepcopy详解的更多相关文章
- **Python中的深拷贝和浅拷贝详解
Python中的深拷贝和浅拷贝详解 这篇文章主要介绍了Python中的深拷贝和浅拷贝详解,本文讲解了变量-对象-引用.可变对象-不可变对象.拷贝等内容. 要说清楚Python中的深浅拷贝,需要 ...
- python中的subprocess.Popen()使用详解---以及注意的问题(死锁)
从python2.4版本开始,可以用subprocess这个模块来产生子进程,并连接到子进程的标准输入/输出/错误中去,还可以得到子进程的返回值. subprocess意在替代其他几个老的模块或者函数 ...
- Python学习一:序列基础详解
作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7858473.html 邮箱:moyi@moyib ...
- Python学习二:词典基础详解
作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7862377.html 邮箱:moyi@moyib ...
- python 3.x 爬虫基础---Urllib详解
python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 前言 爬虫也了解了一段时间了希望在半个月的时间内 ...
- python中argparse模块用法实例详解
python中argparse模块用法实例详解 这篇文章主要介绍了python中argparse模块用法,以实例形式较为详细的分析了argparse模块解析命令行参数的使用技巧,需要的朋友可以参考下 ...
- python selenium 三种等待方式详解[转]
python selenium 三种等待方式详解 引言: 当你觉得你的定位没有问题,但是却直接报了元素不可见,那你就可以考虑是不是因为程序运行太快或者页面加载太慢造成了元素不可见,那就必须要加等待 ...
- python设计模式之迭代器与生成器详解(五)
前言 迭代器是设计模式中的一种行为模式,它提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示.python提倡使用生成器,生成器也是迭代器的一种. 系列文章 python设计模 ...
- python+requests接口自动化测试框架实例详解
python+requests接口自动化测试框架实例详解 转自https://my.oschina.net/u/3041656/blog/820023 摘要: python + requests实 ...
随机推荐
- vue引入echarts、找不到的图表引入方法、图表中的点击事件
1.在vue-cli项目中添加webpack配置,本文引入的最新版本.在 3.1.1 版本之前 ECharts 在 npm 上的 package 是非官方维护的,从 3.1.1 开始由官方 EFE 维 ...
- Project 2:传奇汉诺塔
汉诺塔简介:汉诺塔问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在 ...
- grep&正则表达式
p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; f ...
- MITNIK ATTACK
Https 443 http 80 TCP/IP 协议栈:将数据封装包头 传输层报头 Ack回复确认位 FIN结束位 SIN 开始位 RST 重置位 Seq 序号位 网络层报头 目的地址 原地址 报文 ...
- sudoku--SE第二次作业
git传送门 编译环境: windows10.vs2017 所用语言: c++ 首先作为一个晚上闭眼的玩家,我先来讲一下我的心路历程: 最开始接到作业的时候心里是拒绝的,刚出了一趟小远门就这样,就很难 ...
- 第03周-Java作业评价
1.作业存在的问题 几大扣分点: 思维导图敷衍了事 -1 代码格式混乱 -2 无码云提交记录 -2 无PTA实验总结 -2 部分题目未完成. 格式问题:到现在还搞不清楚的,主要是态度问题.相关的教程 ...
- Git与码云(Git@OSC)入门-如何在实验室和宿舍同步你的代码(2)
4. 处理冲突 4.1 向远程仓库push时无法提交成功,提示在push前应该先pull 如图所示: 有可能是因为远程仓库的版本与本地仓库的版本不一致,所以应先git pull将远程仓库的内容合并到本 ...
- allego 输出报告说明
List of Available Reports Assigned Function Report Lists all assigned functions, sorted by function ...
- Python: 列表注意细节与元组的基本用法
列表注意细节: 1.list.clear():将列表中成员清空(与del list区别开) 2.list.copy():复制一份相同的列表(浅COPY,只复制列表第一层) 3.如果两个列表相等,如li ...
- CSS的常用属性
刚开始学习前段的我,还处于初级阶段,一些东西还是会有搞不明白的时候,还是要大家多多理解.今说就一些关于CSS的常用属性吧! 一.CSS常用选择器 CSS选择器应该说是一个非常重要的工具吧,选择器用得好 ...