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测试开发面试之深浅拷贝相关推荐
- 初级测试开发面试题_初级开发人员在编写单元测试时常犯的错误
初级测试开发面试题 自从我编写第一个单元测试以来已经有10年了. 从那时起,我不记得我已经编写了成千上万的单元测试. 老实说,我在源代码和测试代码之间没有任何区别. 对我来说是同一回事. 测试代码是源 ...
- 吊打面试官系列之:常见测试开发面试题汇总,在面试的路上,总要先下手为强。
测试开发面试题汇总 1.引言 2.热身题 3.理论基础 4.管理技能 5.服务端 7.移动APP 7.1 理论 7.2 实践 8.自动化测试 9.工具使用 10.算法 11.SQL 12.Linux ...
- python高级开发面试题_python面试的100题(16)
Python高级 元类 42.Python中类方法.类实例方法.静态方法有何区别? 类方法: 是类对象的方法,在定义时需要在上方使用 @classmethod 进行装饰,形参为cls,表示类对象,类对 ...
- 金九银十面试怒拿6个offer——测试开发面试题整理
金九银十面试怒拿6个offer--测试开发面试题整理 1.软件测试的流程是什么? 2.测试用例主要有哪些元素? 3.软件测试有什么策略和阶段? 4.黑盒测试和白盒测试是什么?二者有什么区别? 5.软件 ...
- 九月刚入职字节跳动的测试开发面试题,附答案
朋友入职已经两周了,整体工作环境还是非常满意的!所以这次特意抽空给我写出了这份面试题,而我把它分享给小伙伴们,面试&入职的经验! 大概是在7月中的时候他告诉我投递了简历,9月的时候经过了3轮面 ...
- 测试开发面试题(1)
1.给你一个网站,你如何测试? 首先,查找需求说明.网站设计等相关文档,分析测试需求:制定测试计划,确定测试范围和测试策略,一般包括以下及部分,功能性测试.界面测试.性能测试. 数据库测试.安全性测试 ...
- 【面试题】测试工程师/自动化测试/测试开发面试题整理
[自己做个笔记,大家有需要的可以看看,有问题欢迎指出] 文章目录 基础面试题 1.设计用例的方法.依据有哪些 2.软件的生命周期 3.测试流程 4.bug生命周期 5.你在测试中发现了一个bug,但是 ...
- 月薪1.5w,经常面试的测试开发面试题
1.你在测试中发现了一个bug,但是开发经理认为这不是一个bug,你应该怎样解决? 首先,将问题提交到缺陷管理库进行备案. 然后,要获取判断的依据和标准: 根绝需求说明书,产品说明.设计文档等,确认实 ...
- 100道经典测试开发面试题,从基础到进阶(1)
1.你在测试中发现了一个bug,但是开发经理认为这不是一个bug,你应该怎样解决? 首先,将问题提交到缺陷管理库进行备案. 然后,要获取判断的依据和标准: 根绝需求说明书,产品说明.设计文档等,确认实 ...
最新文章
- 前端学习01-04格式标签
- Python 一路走来 Django
- P6855-「EZEC-4.5」走方格【dp】
- python shell运行当前程序、可以按下_Python下调用Linux的Shell命令的方法
- html编写气泡对话框,HTML+CSS入门 纯CSS手写圆角气泡对话框
- MySQL Spatial Analysis Functions(空间计算方法)
- 在ionic这个框架下(Angular JS),对URL进行重写,过滤掉URL中的#号
- 模拟get和post请求(支持自定义header和测试CDN节点)
- Android 面试常问七道题
- Vbs脚本编程简明教程之五
- 《沧浪之水》:现实从来不怕谁倔犟
- 收藏.IBM.某高手点评IBM历年试题
- 大家信夫信用服务平台普及诚信教育在进行
- 微信公众号开发之流式数据读取
- 西安交大计算机考研软件工程编程题库(二十四)
- 51单片机c语言直流电机廷迟启停,51单片机控制直流电机不会加定时器延时程序...
- 无线通信基础无线信道的统计描述(二)
- 点开,看一段,你就会喜欢上学习pandas,你该这么学!No.3
- border-box宽度计算方式
- 百度网盘如何倍速播放
热门文章
- Tickets HDU - 1260
- Codeforces Round #694 Div. 2
- 【无码专区13】最小公倍数(线段树)
- 【李超树】李超线段树维护凸包(凸壳) (例题:blue mary开公司+线段游戏+ZZH的旅行)
- [POJ 3164]Command Network(最小树形图,朱刘算法)
- P3239 [HNOI2015]亚瑟王(期望)
- P5496-[模板]回文自动机【PAM】
- jzoj1293,P2933-气象牛(气象测量)【dp】
- [NOI2014] 起床困难综合症(二进制,贪心)
- codefoces 939E Maximize!好题