深拷贝和浅拷贝

不管对于浅拷贝、还是深拷贝,针对不可变对象str、int、tuple(有点特殊)、boolean,它的内存地址是不变的,拷贝的仅仅是值

import copy

a = 1
b = copy.copy(a) # 浅拷贝a
c = copy.deepcopy(a) # 深拷贝a
print(a is b)
print(a is c) >>> True
>>> True is比较的是二者的内存地址是否相同

浅拷贝

浅拷贝只拷贝可变对象的第一层,如果可变对象中还有可变的对象,那么第二层拷贝不到,拷贝不到就是说,第二层的内存地址是共用的,都是指向同一片内存地址

import copy

a = [1, 2, [3, 4]]
b = copy.copy(a)
print(a is b)
print(a[2] is b[2]) >>> a的内存地址 140369750660592
>>> b的内存地址 140369750677376
>>> False
>>> a[2]的内存地址 140369750677056
>>> b[2]的内存地址 140369750677056
>>> True 浅拷贝只拷贝第一层,所以b拷贝出来的内存地址是与a不同的,
但因为浅拷贝只能拷贝第一层,所以b[2]这个列表拷贝不到,指向的内存地址仍然是a[2]的内存地址

深拷贝

深拷贝对于可变的对象,全部拷贝下来,全部都开辟一片新的内存地址

import copy

a = [1, 2, [3, 4]]
b = copy.deepcopy(a)
print('a的内存地址', id(a))
print('b的内存地址', id(b))
print(a is b)
print('a[2]的内存地址', id(a[2]))
print('b[2]的内存地址', id(b[2]))
print(a[2] is b[2]) >>> a的内存地址 140312626337184
>>> b的内存地址 140312626353968
>>> False
>>> a[2]的内存地址 140312626353648
>>> b[2]的内存地址 140312626337264
>>> False

最新文章

  1. 【51Nod 1616】【算法马拉松 19B】最小集合
  2. JDIC 访问Web时NullPointerException
  3. MySQL functions, IF, CASE
  4. M1卡介绍
  5. linux -- 基于mysql tomcat 部署web项目
  6. ok6410 android driver(5)
  7. VS中快速生成json数据格式对应的实体
  8. VoLTE、呼叫等待(保持)
  9. MySql语句大全:创建、授权、查询、修改等
  10. connectionStrings基本配置
  11. Angular - - $interval 和 $timeout
  12. P1156 垃圾陷阱
  13. 安卓开发笔记(十三):SQLite数据库储存(下)数据的增添,更改,删除,查询
  14. Ansible------角色
  15. Spark架构
  16. Pycharm学习python路
  17. 实例,C# 导出.dbf格式文件
  18. grub配置指南
  19. Makefile中的MAKECMDGOALS
  20. Android8.0适配那点事(二)

热门文章

  1. Codeforces Round #671 (Div. 2)
  2. 矩阵树定理(Kirchhoff || Laplace)初探——Part 1(无向图计数)
  3. S - Layout (最短路&&差分约束)
  4. Educational Codeforces Round 9 C. The Smallest String Concatenation(字符串排序)
  5. Codeforces Round #540 (Div. 3) B. Tanya and Candies (后缀和)
  6. EFCore学习记录--数据访问技术人门
  7. PowerShell随笔4---变量
  8. 国产网络损伤仪SandStorm -- 如何连接设备
  9. Web安全之SQL注入(原理,绕过,防御)
  10. k8s二进制部署 - harbor安装