先来道题热热身

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测试开发面试之深浅拷贝相关推荐

  1. 初级测试开发面试题_初级开发人员在编写单元测试时常犯的错误

    初级测试开发面试题 自从我编写第一个单元测试以来已经有10年了. 从那时起,我不记得我已经编写了成千上万的单元测试. 老实说,我在源代码和测试代码之间没有任何区别. 对我来说是同一回事. 测试代码是源 ...

  2. 吊打面试官系列之:常见测试开发面试题汇总,在面试的路上,总要先下手为强。

    测试开发面试题汇总 1.引言 2.热身题 3.理论基础 4.管理技能 5.服务端 7.移动APP 7.1 理论 7.2 实践 8.自动化测试 9.工具使用 10.算法 11.SQL 12.Linux ...

  3. python高级开发面试题_python面试的100题(16)

    Python高级 元类 42.Python中类方法.类实例方法.静态方法有何区别? 类方法: 是类对象的方法,在定义时需要在上方使用 @classmethod 进行装饰,形参为cls,表示类对象,类对 ...

  4. 金九银十面试怒拿6个offer——测试开发面试题整理

    金九银十面试怒拿6个offer--测试开发面试题整理 1.软件测试的流程是什么? 2.测试用例主要有哪些元素? 3.软件测试有什么策略和阶段? 4.黑盒测试和白盒测试是什么?二者有什么区别? 5.软件 ...

  5. 九月刚入职字节跳动的测试开发面试题,附答案

    朋友入职已经两周了,整体工作环境还是非常满意的!所以这次特意抽空给我写出了这份面试题,而我把它分享给小伙伴们,面试&入职的经验! 大概是在7月中的时候他告诉我投递了简历,9月的时候经过了3轮面 ...

  6. 测试开发面试题(1)

    1.给你一个网站,你如何测试? 首先,查找需求说明.网站设计等相关文档,分析测试需求:制定测试计划,确定测试范围和测试策略,一般包括以下及部分,功能性测试.界面测试.性能测试. 数据库测试.安全性测试 ...

  7. 【面试题】测试工程师/自动化测试/测试开发面试题整理

    [自己做个笔记,大家有需要的可以看看,有问题欢迎指出] 文章目录 基础面试题 1.设计用例的方法.依据有哪些 2.软件的生命周期 3.测试流程 4.bug生命周期 5.你在测试中发现了一个bug,但是 ...

  8. 月薪1.5w,经常面试的测试开发面试题

    1.你在测试中发现了一个bug,但是开发经理认为这不是一个bug,你应该怎样解决? 首先,将问题提交到缺陷管理库进行备案. 然后,要获取判断的依据和标准: 根绝需求说明书,产品说明.设计文档等,确认实 ...

  9. 100道经典测试开发面试题,从基础到进阶(1)

    1.你在测试中发现了一个bug,但是开发经理认为这不是一个bug,你应该怎样解决? 首先,将问题提交到缺陷管理库进行备案. 然后,要获取判断的依据和标准: 根绝需求说明书,产品说明.设计文档等,确认实 ...

最新文章

  1. 前端学习01-04格式标签
  2. Python 一路走来 Django
  3. P6855-「EZEC-4.5」走方格【dp】
  4. python shell运行当前程序、可以按下_Python下调用Linux的Shell命令的方法
  5. html编写气泡对话框,HTML+CSS入门 纯CSS手写圆角气泡对话框
  6. MySQL Spatial Analysis Functions(空间计算方法)
  7. 在ionic这个框架下(Angular JS),对URL进行重写,过滤掉URL中的#号
  8. 模拟get和post请求(支持自定义header和测试CDN节点)
  9. Android 面试常问七道题
  10. Vbs脚本编程简明教程之五
  11. 《沧浪之水》:现实从来不怕谁倔犟
  12. 收藏.IBM.某高手点评IBM历年试题
  13. 大家信夫信用服务平台普及诚信教育在进行
  14. 微信公众号开发之流式数据读取
  15. 西安交大计算机考研软件工程编程题库(二十四)
  16. 51单片机c语言直流电机廷迟启停,51单片机控制直流电机不会加定时器延时程序...
  17. 无线通信基础无线信道的统计描述(二)
  18. 点开,看一段,你就会喜欢上学习pandas,你该这么学!No.3
  19. border-box宽度计算方式
  20. 百度网盘如何倍速播放

热门文章

  1. Tickets HDU - 1260
  2. Codeforces Round #694 Div. 2
  3. 【无码专区13】最小公倍数(线段树)
  4. 【李超树】李超线段树维护凸包(凸壳) (例题:blue mary开公司+线段游戏+ZZH的旅行)
  5. [POJ 3164]Command Network(最小树形图,朱刘算法)
  6. P3239 [HNOI2015]亚瑟王(期望)
  7. P5496-[模板]回文自动机【PAM】
  8. jzoj1293,P2933-气象牛(气象测量)【dp】
  9. [NOI2014] 起床困难综合症(二进制,贪心)
  10. codefoces 939E Maximize!好题