python3 copy_python3 深浅copy对比详解
一、赋值对比
1、列表
l1 = [1,2,3]
l2 = l1
l1.append('a')
print(l1,l2) #[1, 2, 3, 'a'] [1, 2, 3, 'a']
print(id(l1),id(l2)) #43499848 43499848
#可以看到两个列表的值以及id值相同,对应的是同一个内存地址
2、字典
dic = {'name':'barry'}
dic1 = dic
dic['age'] = 18
print(dic,dic1) #{'name': 'barry', 'age': 18} {'name': 'barry', 'age': 18}
print(id(dic),id(dic1)) #31157344 31157344
#可以看到两个字典的值以及id值相同,对应的是同一个内存地址
3、字符串
s = 'alex'
s1 = s
s2 = s.replace('a','A')
print(s,s1,s2) #alex alex Alex
print(id(s),id(s1),id(s2)) #31040208 31040208 31040376
#赋值是同一个内存地址,替换字符串后的变量s2是另外的地址
二、深浅copy
1、浅copy
对于浅copy来说,第一层创建的是新的内存地址。而从第二层开始,指向的是同一个内存地址,所有,对于第二层以及更深的层数来说,保持一致性。
# 1、普通浅copy
l1 = [1,2,3,4]
l2 = l1.copy()
l1.append('a')
print(l1,l2) #[1, 2, 3, 4, 'a'] [1, 2, 3, 4]
print(id(l1),id(l2)) #37077320 37078664
#id内存地址不一样,创建了两个地址空间,一个改变,另一个不会变化
# 2、嵌套浅copy
import copy
l1 = [1,[22,33,44],3,4,]
l2 = copy.deepcopy(l1)
# 改变第一层
l1[0] = 111
print(l1,l2) #[111, [22, 33, 44], 3, 4] [1, [22, 33, 44], 3, 4]
print(id(l1),id(l2)) #43238536 43239048
# 改变第二层
l1[1].append('a')
print(l1,l2) # [111, [22, 33, 44, 'a'], 3, 4] [1, [22, 33, 44], 3, 4]
print(id(l1),id(l2)) #43238536 43239048
2、 深copy.deepcopy()
对于深copy来说,两个是完全独立的,改变任意一个的元素(无论是多少层),另一个绝不会改变。
import copy
l1 = [1,[22,33,44],3,4,]
l2 = copy.deepcopy(l1)
# 改变第一层
l1[0] = 111
print(l1,l2) #[111, [22, 33, 44], 3, 4] [1, [22, 33, 44], 3, 4]
print(id(l1),id(l2)) #43238536 43239048
# 改变第二层
l1[1].append('a')
print(l1,l2) # [111, [22, 33, 44, 'a'], 3, 4] [1, [22, 33, 44], 3, 4]
print(id(l1),id(l2)) #43238536 43239048
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
本文标题: python3 深浅copy对比详解
本文地址: http://www.cppcns.com/jiaoben/python/267988.html
python3 copy_python3 深浅copy对比详解相关推荐
- python3.8.1安装教程-Linux安装Python3.8.1的教程详解
本例以Linux上安装Pyhton3.8版本为例进行说明 1.依赖包安装 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-dev ...
- python安装方法3.8.2_Linux安装Python3.8.1的教程详解
本例以Linux上安装Pyhton3.8版本为例进行说明 1.依赖包安装 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-dev ...
- racle B-Tree和Bitmap索引对比详解
http://space.itpub.net/13062352/viewspace-614553 oracle B-Tree和Bitmap索引对比详解 B树索引是所有大型关系数据库毕用的技术,也是or ...
- php打印出函数的内容吗,PHP打印函数集合详解以及PHP打印函数对比详解(精)
1 echo();2 print();3 die();4 printf();5 sprintf();6 print_r();7 var_dump(); 1 echo() 可以同时输出多个字符串,可以多 ...
- python input函数详解_对Python3中的input函数详解
下面介绍python3中的input函数及其在python2及pyhton3中的不同. python3中的ininput函数,首先利用help(input)函数查看函数信息: 以上信息说明input函 ...
- 用python3做学生管理系统_详解用python实现基本的学生管理系统(文件存储版)(python3)...
详解用python实现基本的学生管理系统(文件存储版)(python3) 来源:中文源码网 浏览: 次 日期:2019年11月5日 详解用python实现基本的学生管理系统(文件存储版)( ...
- python3 yield 大文件_详解Python3中yield生成器的用法
任何使用yield的函数都称之为生成器,如: def count(n): while n > 0: yield n #生成值:n n -= 1 另外一种说法:生成器就是一个返回迭代器的函数,与普 ...
- Python3爬虫之Selenium库详解
1.Selenium库的介绍: Selenium库是用来自动化测试的工具,支持多种浏览器,爬虫中主要用来解决JavaScript渲染的问题.给浏览器发送指令,使得浏览器做出跳转,点击,下拉等动作,模拟 ...
- python3 绝对值_Python3 abs() 函数详解 获取数字的绝对值
Python3 abs() 函数详解 获取数字的绝对值 abs函数是Python的内置函数,在python文件中直接可以使用. 它的主要用途是获取数字的绝对值. 语法 abs(n) 参数 n - 数值 ...
最新文章
- 大佬都在用的桑基图到底怎么做?告诉你个最简单的方法
- java commons.util_Java — CommonUtil
- Linux编程手册读书笔记第二章(20140330)
- 支付宝 “集五福”今日开启;小米起诉美国国防部;Chrome 再次屏蔽七个端口 | 极客头条...
- 前端使用 geetest 行为验证 web-部署教程
- python实现时间戳和时间格式转换以及当前时间,特定时间的前后偏移
- MySQL使用规范手册,程序员必知必会
- 算法萌新如何学好动态规划(二)
- 文件夹被隐藏生成同名.exe文件的文件夹图标病毒你还不会解决?
- 图像处理之图像噪声和各种噪声的matlab实现
- 互联网行业中,哪些职位比较有前途?
- java技术--报警通知及实现方式
- test %eax %eax
- 阿里、腾讯“打包”领跑云计算,两极格局将就此固化?
- 字节跳动2021批笔试题解
- html生成闪电特效
- GridView分页详解
- GPS实验二:GPS接收机的使用
- 『网络迷踪』ctfshow-国足加油
- SAP物料货架寿命管理
热门文章
- mysql bundle.tar_MySQL 5.6 Bundle Tar安装
- react 判断地址是否有效_继续,react-redux原理解析
- 无障碍开发(六)之ARIA在HTML中的使用规则
- CF1070L Odd Federalization 高斯消元
- Python:Selenium 1:浏览器驱动
- Java多线程:线程间通信之Lock
- SpringMVC深度探险(二) —— SpringMVC概览
- LeetCode Best Time to Buy and Sell Stock II
- poj 1987 树的分治
- 关于modelsim 6.4a遇到的问题