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实 ...
随机推荐
- angularJS+Ionic移动端图片上传的解决办法
前端开发中经常会碰到图片上传的问题,网上的解决办法很多,可是有些图片上传的插件会有一些附属的插件,因此因为一个图片上传的问题可能额需要引入其他插件到项目中,久而久之项目会不伦不类,有时候插件之间也会有 ...
- Kafka Streams 剖析
1.概述 Kafka Streams 是一个用来处理流式数据的库,属于Java类库,它并不是一个流处理框架,和Storm,Spark Streaming这类流处理框架是明显不一样的.那这样一个库是做什 ...
- sqlserver与mysql中vachar(n)中遇到的坑
前两天在做将mysql的数据表导入到sqlserver当中. 本人比较愚笨,操作方法 是先将mysql的数据表到处为insert脚本,再在sqlserver中执行sql脚本 在网上看了一下那些方法 , ...
- 转:【Java并发编程】之八:多线程环境中安全使用集合API(含代码)
转载请注明出处:http://blog.csdn.net/ns_code/article/details/17200509 在集合API中,最初设计的Vector和Hashtable是多线程安 ...
- Linux下undefined reference to ‘pthread_create’问题解决
Linux下undefined reference to 'pthread_create'问题解决 在试用Linux 线程模块时,试用pthread_create 函数. 编译命令为 gcc main ...
- MongoDB学习之路(一)
NoSQL简介 NoSQL(Not Only SQL),意为"不仅仅是SQL" 关系型数据库遵循ACID规则 1. A(Atomicity)原子性 指的是事务里的所有操作要么全部做 ...
- 团队作业10——项目复审与事后分析(Beta版本)
油炸咸鱼24点APP 团队作业10--事后诸葛亮分析; 团队作业10--Beta阶段项目复审;
- 201521123030《Java程序设计》第3周学习总结
1. 本周学习总结 2. 书面作业 1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; p ...
- 201521123040《Java程序设计》第10周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 1.finally 题目4-2 1.1 截图你的提交结果(出 ...
- PTA分享码-Java
主要用于Java语法练习,非竞赛类题目. 1. Java入门 959dbf0b7729daa61d379ec95fb8ddb0 2. Java基本语法 23bd8870e ...