python3 深浅copy对比详解
作者:宋鹏超 发布时间:2023-11-08 11:12:51
标签:python,深,浅,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
来源:https://blog.51cto.com/qidian510/2156222
0
投稿
猜你喜欢
- 1,flask中内置的过滤器模板中常用方法:{#过滤器调用方式{{变量|过滤器名称}} #} <!-- safe过滤器,可
- Cumsum :计算轴向元素累加和,返回由中间结果组成的数组重点就是返回值是“由中间结果组成的数组”以下代码在python3.6版本运行成功
- 前言:项目的成就感来源于大家~~必须先感谢一切该感谢的人!(旁白:写了很多次设计实录分享,这次是最百感交集的一次,话多这习惯还大家海涵~嘻嘻
- Python文件遍历os.walk()与os.listdir()在图片处理过程中,样本数据的组织是个常见的问题,样本组织好了,后面数据转换、
- XML、 XLink、 Namespace、 DTD、 Schema、 CSS、 XHTML...假如你从未接触XML, 或许你会感觉不知从
- 利用python查找电脑里的文件非常方便比如在我的电脑:D:\软件 文件夹里有非常非常多的软件。我忘记某个软件叫什么名字了,只记得文件名称里
- 类、构造函数、原型先来说明一点:在上面的内容中提到,每一个函数都包含了一个prototype属性,这个属性指向了一个prototype对象(
- 年前在重写淘宝旺铺里的会员卡脚本的时候,无意中发现了一个有趣的事情。代码类似:var associative_array = new Arr
- 递归函数及递归次数受到限制一个函数在内部调用自己,那么这个函数是递归函数。递归会反复使用本身,每递归一次,越接近最终的值。当一个问题可以由许
- 如何用ASP来识别操作系统是vista的?我在网上找了个函数,但是不能判断是vista系统,希望大家帮忙. 这个是我在网上找的函数: Fun
- 一 基本知识millisecond 毫秒microsecond 微秒 nanosecond 纳秒1秒=1000毫秒 1毫秒=1000微秒 1
- Python学习第一篇。把之前学习的Python基础知识总结一下。一、认识Python首先我们得清楚这个:Python这个名字是从Monty
- 调用很简单 Readkid.motion.tween(target,duration, vars)target: 要缓动的DOM对象dura
- 定义总是很抽象。存储进程其实就是能完成一定操作的一组SQL语句,只不过这组语句是放在数据库中的(这里我们只谈SQL SERVER)。如果我们
- OpenCV函数原型:cv2.resize(InputArray src, OutputArray dst, Size, fx, fy, i
- 谈到“登录”,大多数人脑海中会立刻浮现出那个“两小框:一用户名,一密码,外加一按钮”的经典豆腐块, 这样的功能模块在互联网上屡见不鲜, 成为
- 前言作为一个数据分析师,应该信奉一句话——“一图胜千言”。不过这里要说的并不是数据可视化,而是一款全民向的产品形态——表情包!!!!表情包不
- 背景在注册或者登陆场景下,经常会遇到需要输入图片验证码的情况,最经典的就是12306买火车票。图片验证码的破解还是有一定难度的,而且如果配合
- 主要用到requests和bf4两个库将获得的信息保存在d://hotsearch.txt下import requests;import b
- 概述在PHP中有一种代码复用的技术, 因为单继承的问题, 有些公共方法无法在父类中写出, 而 Trait可以应对这种情况, 它可以定义一些复