python测试之道电子书_python测试开发面试之深浅拷贝
先来道题热热身
a = ('a', 'b','c')
c = copy.copy(a)
d = copy.deepcopy(a)
if c == d:
print("c和d的值相等")
if id(c) == id(d):
print("c和d的地址相等")
想想最后打印的是什么?
什么是深拷贝和浅拷贝
深拷贝,就是在对某个对象进行拷贝的时候,如果这个对象持有其他对象的引用,在拷贝的时候会将要拷贝的对象以及引用的对象,一起拷贝。
而浅拷贝只拷贝当前对象和持有的索引,不拷贝索引指向的对象。举个例子说明一下,比如当前有个列表a = [1,2,3], b = [3,4,a],[3,4,a]对象持有了[1,2,3]对象的引用,在对b进行深拷贝的时候,会将a对象一起拷贝一份,而浅拷贝的时候则不会。
a = [1,2,3]
b = [4,5,6,a]
对b进行浅拷贝
c = copy.copy(b)
这个时候对a对象进行修改,会影响c
a.append(8)
c
[4, 5, 6, [1, 2, 3, 8]]
对b进行深拷贝之后,再对a进行修改,则不会影响到d
d = copy.deepcopy(b)
d
[4, 5, 6, [1, 2, 3, 8]]
a.append(66)
d
[4, 5, 6, [1, 2, 3, 8]
当深浅拷贝遇到可变与不可变对象时会发生什么
上面用列表这种可变数据结构举例,再来看一下元组这种不可变结构,在进行深浅拷贝时定的现象。
a = (1,2,3)
b = copy.copy(a)
c = copy.deepcopy(a)
print(id(a))
print(id(b))
print(id(c))
输出:
4502776896
4502776896
4502776896
从结果中发现,a、b、c的内存地址大都是一样,所以在对不可变对象进行拷贝的时候,无论是浅拷贝还是深拷贝,都没有重新在内存中开辟新的地址,都只是对原对象增加了一个引用。
那如果不可变对象汇总包含有对可变对象的引用又会是怎么样呢?
a1 = [1,2,3]
a = (1,2,3, a1)
b = copy.copy(a)
c = copy.deepcopy(a)
print(id(a))
print(id(b))
print(id(c))
输出:
4502730288
4502730288
4503232240
b是浅拷贝生成的对象和原对象a的内存地址是一样对的,c是深拷贝生成的对象,发现内存地址和原对象a的地址是不一样的。
也就是说如果不可变对象中持有了可变对象的引用,在进行深拷贝的时候会在内存中开辟新的地址存放对象。
回到文章开头提出的问题,是对不可变对象进行拷贝,而且不可变对象中并没有持有可变对象的引用,所以两个print语句都会执行。
python测试之道电子书_python测试开发面试之深浅拷贝相关推荐
- python测试开发面试题_python测试开发面试之深浅拷贝
先来道题热热身 a = ('a', 'b','c') c = copy.copy(a) d = copy.deepcopy(a) if c == d: print("c和d的值相等" ...
- 测试开发python面试_python测试开发面试之深浅拷贝
先来道题热热身 a = ('a', 'b','c') c = copy.copy(a) d = copy.deepcopy(a) if c == d: print("c和d的值相等" ...
- python测试开发面试之深浅拷贝【拼多多】
先来道题热热身 a = ('a', 'b','c') c = copy.copy(a) d = copy.deepcopy(a) if c == d: print("c和d的值相等" ...
- python开发面试题目_Python测试开发面试笔试题
Python 测试开发面试笔试题 一,中文单项选择题(30 分,每个 3 分) 1.下列哪个语句在 Python 中是非法的? A.x = y = z = 1 B.x = (y = z + 1) C. ...
- python测试之道第5章模拟网络请求
python发送网络请求是通过模块中的方法来实现的,模块定义好了请求的语法格式,只需要按照相应的语法格式对号入座写代码即可. 一般来说我们测试的都是基于HTTP和HTTPS的网络请求,python有很 ...
- 一道大厂测试开发面试真题,你需要几分钟解答?
又到一年年底!年底其实是跳槽换坑的绝佳时机,毕竟可以「年前面试,年后入职」,而且面试越早,好坑位较多,可选择的余地也较大.对于做好准备的测试同学来说,是绝对要鼓励多发简历,多找找面试机会的.哪怕为接下 ...
- 测试开发面试技巧_面试技巧将给您带来信心并帮助您获得开发工作
测试开发面试技巧 by John Cobb 约翰·科布(John Cobb) 面试技巧将给您带来信心并帮助您获得开发工作 (Interview tips that will give you conf ...
- 【骐程】【深信服测试开发面试】首次面试互联网
[骐程][深信服测试开发面试]首次面试互联网 面试中出现的问题.主要就是 一面: 主要对自己的项目中使用的技术不是很熟悉,尤其是对自己项目中的hashmap等这些东西的基础底层原理没有看,也没有掌握, ...
- python移动化测试开发面试
什么是压力面试: a) 压力面试是指有意制造紧张,以了解求职者如何面对压力 b) 提出生硬的.不礼貌的问题故意使候选人感到不舒服 c) 针对某一事项或问题做连串的发问,直至无法回答 压力面试的目的: ...
- 银行 测试|测试开发 面试真题|面经 汇总
招银测开面经 一面 1.面向对象3大特征 2.java是否能多继承,怎么实现多继承 3.抽象类 4.数据库特性,隔离级别 5.sql语句查找 6.static关键字的使用 7.手撕:寻找字符串出现频率 ...
最新文章
- 解决Qt Creator下 undefined reference to ‘qmain(int,char**)‘的问题
- xctf php2,XCTF PHP2
- 订单生产计划表范本_生产计划管理与物料控制的实施步骤与要领
- 史上最全的Nginx配置参数中文说明
- [css] css中的border:none和border:0px有什么区别?
- linux ded编译,重新编译deb包
- Java 实现Excel表数据的读取和写入 以及过程中可能遇到的问题
- 收不到oracle邮件,dovecot不能够收邮件
- 【FFMPEG系列】之查看FFMPEG版本号
- oracle 回收站
- axios的this指向_vue使用axios时this指向哪里
- Java之打印指定月份日历
- c语言随机数猜数游戏
- 三菱f800变频器 频率设定_三菱F800变频器调试参数总结
- C语言如何判断一个整数是奇数还是偶数
- android代码计时,android秒表计时代码
- 深度学习之蛋白质二级结构预测
- flask web开发 Set it to True to suppress this warning问题
- html5禁止显示相册,手机相册图片莫名被屏蔽,显示“涉嫌违规,系统审查中”半年了...
- 如何设置VS的唯美背景
热门文章
- highslide图片查看特效
- Microsoft .NET 框架常见问题
- 【算法】排序_堆排序
- 利用ajax如何根据权限加载目录,AJAX调用框架,包含权限验证
- python搜索关键词自动提交_根据关键词,自动从搜索引擎采集相关网站的真实地址与标题...
- shell中返回值是1为真还是假_shell脚本返回值问题的解决
- hashmap 遍历_HashMap面试必问的数据结构相关知识总结
- android 判断主线程_腾讯Android面试:Handler中有Loop死循环,为什么没有阻塞主线程...
- nginx+uwsgi启动Django项目
- WPF备忘录(1)有笑脸,有Popup