当前位置: 首页 > news >正文

python基础教程:深浅copy的详细用法

前言

嗨喽,大家好呀~这里是爱看美女的茜茜呐

1.先看赋值运算

l1 = [1,2,3,['barry','alex']]
l2 = l1l1[0] = 111
print(l1)  # [111, 2, 3, ['barry', 'alex']]
print(l2)  # [111, 2, 3, ['barry', 'alex']]l1[3][0] = 'wusir'
print(l1)  # [111, 2, 3, ['wusir', 'alex']]
print(l2)  # [111, 2, 3, ['wusir', 'alex']]

对于赋值运算来说,l1与l2指向的是同一个内存地址,所以他们是完全一样的。

2.浅拷贝copy

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:261823976
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
#同一代码块下:
l1 = [1, '太白', True, (1,2,3), [22, 33]]
l2 = l1.copy()
print(id(l1), id(l2))  # 2713214468360 2713214524680
print(id(l1[-2]), id(l2[-2]))  # 2547618888008 2547618888008
print(id(l1[-1]),id(l2[-1]))  # 2547620322952 2547620322952# 不同代码块下:
>>> l1 = [1, '太白', True, (1, 2, 3), [22, 33]]
>>> l2 = l1.copy()
>>> print(id(l1), id(l2))
1477183162120 1477183162696
>>> print(id(l1[-2]), id(l2[-2]))
1477181814032 1477181814032
>>> print(id(l1[-1]), id(l2[-1]))
1477183162504 1477183162504

对于浅copy来说,只是在内存中重新创建了开辟了一个空间存放一个新列表,但是新列表中的元素与原列表中的元素是公用的。


👇 👇 👇 更多精彩机密、教程,尽在下方,赶紧点击了解吧~

python源码、视频教程、插件安装教程、资料我都准备好了,直接在文末名片自取就可


3.深拷贝deepcopy

# 同一代码块下
import copy
l1 = [1, 'alex', True, (1,2,3), [22, 33]]
l2 = copy.deepcopy(l1)
print(id(l1), id(l2))  # 2788324482440 2788324483016
print(id(l1[0]),id(l2[0]))  # 1470562768 1470562768
print(id(l1[-1]),id(l2[-1]))  # 2788324482632 2788324482696
print(id(l1[-2]),id(l2[-2]))  # 2788323047752 2788323047752# 不同代码块下
>>> import copy
>>> l1 = [1, '太白', True, (1, 2, 3), [22, 33]]
>>> l2 = copy.deepcopy(l1)
>>> print(id(l1), id(l2))
1477183162824 1477183162632
>>> print(id(0), id(0))
1470562736 1470562736
>>> print(id(-2), id(-2))
1470562672 1470562672
>>> print(id(l1[-1]), id(l2[-1]))
1477183162120 1477183162312

对于深copy来说,列表是在内存中重新创建的,列表中可变的数据类型是重新创建的,列表中的不可变的数据类型是公用的。

一、数字和字符串

对于 数字 和 字符串 而言,赋值、浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址。

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:261823976
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import copy
# ######### 数字、字符串 #########
n1 = 123
# n1 = "i am alex age 10"
print(id(n1))
# ## 赋值 ##
n2 = n1
print(id(n2))
# ## 浅拷贝 ##
n2 = copy.copy(n1)
print(id(n2))# ## 深拷贝 ##
n3 = copy.deepcopy(n1)
print(id(n3))

二、其他基本数据类型

对于字典、元祖、列表 而言,进行赋值、浅拷贝和深拷贝时,其内存地址的变化是不同的。

1、赋值

赋值,只是创建一个变量,该变量指向原来内存地址,如:

n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]}n2 = n1

2、浅拷贝

浅拷贝,在内存中只额外创建第一层数据

import copyn1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]}n3 = copy.copy(n1)

3、深拷贝

深拷贝,在内存中将所有的数据重新创建一份(排除最后一层,即:python内部对字符串和数字的优化)

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:261823976
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import copyn1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]}n4 = copy.deepcopy(n1)

赋值运算:

l1 = [1,2,3]
l2 = l1
l2.append(666)
print(l1,l2)        #[1, 2, 3, 666] [1, 2, 3, 666]

对于赋值运算来说,指向的都是同一个内存地址,一直都不变

浅copy:

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:261823976
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
l1 = [11,22,33]
l2 = l1.copy()
l1.append(666)
print(l1,id(l1))        #[11, 22, 33, 666] 31203144
print(l2,id(l2))        #[11, 22, 33] 31203272
l1 = [11, 22, ['barry', [55, 66]], [11, 22]]
l2 = l1.copy( )
l1[2].append('alex')
#print(l1,id(l1))          #11, 22, ['barry', [55, 66], 'alex'], [11, 22]] 41723272
#print(l2,id(l2))   #  [11, 22, ['barry', [55, 66], 'alex'], [11, 22]] 41723336
print(l1, id(l1[-1]))
print(12, id (l2[-1]))

对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。

深copy:完全独立 (复制其数据完完全全放独立的一个内存,完全拷贝,数据不共享)

import copy
l1 = [11,22, ['barry']]
l2 = copy.deepcopy(l1)
l1[2].append('alex')
print(l1,id(l1[-1]))   # [11,22, ['barry' , 'alex' ]] 42282312
print(l2, id(l2[-1]))  # [11,22, ['barry'] ] 42332680

尾语

感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇

相关文章:

python基础教程:深浅copy的详细用法

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 1.先看赋值运算 l1 [1,2,3,[barry,alex]] l2 l1l1[0] 111 print(l1) # [111, 2, 3, [barry, alex]] print(l2) # [111, 2, 3, [barry, alex]]l1[3][0] wusir print(l1) # [111, 2, 3, [wusir, alex]] print(l2)…...

【算法篇】动态规划(二)

文章目录 分割回文字符串编辑距离不同的子序列动态规划解题思路 分割回文字符串 class Solution { public:bool isPal(string& s,int begin,int end){while(begin<end){if(s[begin]!s[end]){return false;}begin;end--;}return true;}int minCut(string s) {int lens.si…...

数据库 SQL高级查询语句:聚合查询,多表查询,连接查询

目录 创建学生表聚合查询聚合函数直接查询设置别名查询设置条件查询 常用的聚合函数 分组查询单个字段Group by报错分组查询多字段分组查询 多表查询直接查询重命名查询Students表新建一列CourseID 连接&#xff08;JOIN&#xff09;查询INNER JOINRIGHT JOIN, LEFT JOINFULL J…...

pytorch-构建卷积神经网络

构建卷积神经网络 卷积网络中的输入和层与传统神经网络有些区别&#xff0c;需重新设计&#xff0c;训练模块基本一致 import torch import torch.nn as nn import torch.optim as optim import torch.nn.functional as F from torchvision import datasets,transforms impor…...

点云从入门到精通技术详解100篇-点云滤波算法及单木信息提取(续)

目录 3.3 点云滤波算法原理概述 3.3.1 坡度滤波算法 3.3.2 基于不规则三角网滤波 3.3.3 数学形态学滤波...

Gartner发布中国科技报告:数据编织和大模型技术崭露头角

近日&#xff0c;全球知名科技研究和咨询机构Gartner发布了关于中国数据分析与人工智能技术的最新报告。报告指出&#xff0c;中国正迎来数据分析与人工智能领域的蓬勃发展&#xff0c;预计到2026年&#xff0c;将有超过30%的白领工作岗位重新定义&#xff0c;生成式人工智能技…...

java八股文面试[数据库]——explain

使用 EXPLAIN 关键字可以模拟优化器来执行SQL查询语句&#xff0c;从而知道MySQL是如何处理我们的SQL语句的。分析出查询语句或是表结构的性能瓶颈。 MySQL查询过程 通过explain我们可以获得以下信息&#xff1a; 表的读取顺序 数据读取操作的操作类型 哪些索引可以被使用 …...

Kafka3.0.0版本——增加副本因子

目录 一、服务器信息二、启动zookeeper和kafka集群2.1、先启动zookeeper集群2.2、再启动kafka集群 三、增加副本因子3.1、增加副本因子的概述3.2、增加副本因子的示例3.2.1、创建topic(主题)3.2.2、手动增加副本存储 一、服务器信息 四台服务器 原始服务器名称原始服务器ip节点…...

升级iOS 17出现白苹果、不断重启等系统问题怎么办?

iOS 17发布后了&#xff0c;很多果粉都迫不及待的将iphone/ipad升级到最新iOS17系统&#xff0c;体验新系统功能。 但部分果粉因硬件、软件的各种情况&#xff0c;导致升级系统后出现故障&#xff0c;比如白苹果、不断重启、卡在系统升级界面等等问题。 如果遇到了这些系统问题…...

6. `Java` 并发基础之`ReentrantReadLock`

前言&#xff1a;随着多线程程序的普及&#xff0c;线程同步的问题变得越来越常见。Java中提供了多种同步机制来确保线程安全&#xff0c;其中之一就是ReentrantLock。ReentrantLock是Java中比较常用的一种同步机制&#xff0c;它提供了一系列比synchronized更加灵活和可控的操…...

float浮动布局大战position定位布局

华子目录 布局方式普通文档流布局浮动布局&#xff08;浮动主要针对与black&#xff0c;inline元素&#xff09;float属性浮动用途浮动元素父级高度塌陷 position属性定位篇相对定位&#xff08;relative为属性值&#xff0c;配合left属性&#xff0c;和top属性使用&#xff09…...

算法 数据结构 递归插入排序 java插入排序 递归求解插入排序算法 如何用递归写插入排序 插入排序动图 插入排序优化 数据结构(十)

1. 插入排序&#xff08;insertion-sort&#xff09;&#xff1a; 是一种简单直观的排序算法。它的工作原理是通过构建有序序列&#xff0c;对于未排序数据&#xff0c;在已排序序列中从后向前扫描&#xff0c;找到相应位置并插入 算法稳定性: 对于两个相同的数&#xff0c;经过…...

OpenCV(二十二):均值滤波、方框滤波和高斯滤波

目录 1.均值滤波 2.方框滤波 3.高斯滤波 1.均值滤波 OpenCV中的均值滤波&#xff08;Mean Filter&#xff09;是一种简单的滤波技术&#xff0c;用于平滑图像并减少噪声。它的原理非常简单&#xff1a;对于每个像素&#xff0c;将其与其周围邻域内像素的平均值作为新的像素值…...

二叉树的递归遍历和非递归遍历

目录 一.二叉树的递归遍历 1.先序遍历二叉树 2.中序遍历二叉树 3.后序遍历二叉树 二.非递归遍历(栈) 1.先序遍历 2.中序遍历 3.后序遍历 一.二叉树的递归遍历 定义二叉树 #其中TElemType可以是int或者是char,根据要求自定 typedef struct BiNode{TElemType data;stru…...

JDK17:未来已来,你准备好了吗?

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…...

K8s和Docker

Kubernetes&#xff08;简称为K8s&#xff09;和Docker是两个相关但又不同的技术。 一、Docker 1、Docker是一种容器化平台&#xff0c;用于将应用程序及其依赖项打包成可移植的容器。 2、Docker容器可以在任何支持Docker的操作系统上运行 好处&#xff1a;提供了一种轻量级…...

使用物理机服务器应该注意的事项

使用物理机服务器应该注意的事项 如今云计算的发展已经遍布各大领域&#xff0c;尽管现在的云服务器火遍全网&#xff0c;但是仍有一些大型企业依旧选择使用独立物理服务器&#xff0c;你知道这是为什么吗&#xff1f;壹基比小鑫来告诉你吧。 独立物理服务器托管业务适合大中…...

py脚本解决ArcGIS Server服务内存过大的问题

在一台服务器上&#xff0c;使用ArcGIS Server发布地图服务&#xff0c;但是地图服务较多&#xff0c;在发布之后&#xff0c;服务器的内存持续处在95%上下的高位状态&#xff0c;导致服务器运行状态不稳定&#xff0c;经常需要重新启动。重新启动后重新进入这种内存高位的陷阱…...

Go语言Web开发入门指南

Go语言Web开发入门指南 欢迎来到Go语言的Web开发入门指南。Go语言因其出色的性能和并发支持而成为Web开发的热门选择。在本篇文章中&#xff0c;我们将介绍如何使用Go语言构建简单的Web应用程序&#xff0c;包括路由、模板、数据库连接和静态文件服务。 准备工作 在开始之前…...

保姆级教程——VSCode如何在Mac上配置C++的运行环境

vscode官方下载&#xff1a; 点击官网链接&#xff0c;下载对应的pkg&#xff0c;安装打开&#xff1b; https://code.visualstudio.com/插件安装 点击箭头所指插件商店按钮&#xff0c;yyds&#xff1b; 下载C/C 插件&#xff1b; ![外链图片转存 下载CodeLLDB插件&#x…...

MULTISIM仿真揭秘:如何设计高可靠性的光耦隔离PMOS驱动电路

1. 光耦隔离PMOS驱动电路的设计挑战 在工业控制和高压隔离场景中&#xff0c;PMOS驱动电路的设计往往面临诸多挑战。我曾在多个项目中遇到过MOS管因静电击穿而损坏的情况&#xff0c;也经历过因开关频率不足导致系统性能下降的尴尬。这些问题归根结底都与MOS管的特性有关。 MOS…...

从零到一:深度解析BertTokenizer.from_pretrained的加载机制与实战技巧

1. 初识BertTokenizer.from_pretrained&#xff1a;你的NLP敲门砖 第一次接触Hugging Face的Transformers库时&#xff0c;我被BertTokenizer.from_pretrained()这个方法深深吸引了。它就像是一把万能钥匙&#xff0c;能快速打开各种预训练语言模型的大门。记得当时我尝试用传统…...

卡证检测矫正模型中小企业降本:替代万元级专用证件扫描仪方案

卡证检测矫正模型&#xff1a;中小企业降本利器&#xff0c;替代万元级专用证件扫描仪方案 1. 引言&#xff1a;一个被忽视的降本痛点 如果你在中小企业负责行政、人事或财务&#xff0c;一定对下面这个场景不陌生&#xff1a;每天要处理一堆身份证、护照、驾照的复印件或扫描…...

基于SpringBoot的CLAP音频分类服务开发实战

基于SpringBoot的CLAP音频分类服务开发实战 1. 项目背景与价值 音频分类在实际业务中有着广泛的应用场景&#xff0c;比如内容审核、智能家居、媒体分析等。传统的音频分类方案通常需要大量标注数据来训练专用模型&#xff0c;这在很多实际场景中成本高昂且不够灵活。 CLAP&…...

163MusicLyrics:开源高效歌词获取与管理解决方案

163MusicLyrics&#xff1a;开源高效歌词获取与管理解决方案 【免费下载链接】163MusicLyrics Windows 云音乐歌词获取【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 在数字音乐时代&#xff0c;歌词已成为音乐体验不可或缺的一…...

零成本打造私有云盘:从PHPStudy安装到IPv6动态域名解析全攻略

零成本打造私有云盘&#xff1a;从PHPStudy安装到IPv6动态域名解析全攻略 在数字化时代&#xff0c;个人数据存储需求呈爆炸式增长。网盘限速、隐私泄露、订阅费用高昂等问题困扰着许多用户。本文将手把手教你如何利用闲置电脑和免费工具&#xff0c;打造一个完全由自己掌控的私…...

解决Android 12 NFC功能失效:PendingIntent.FLAG_MUTABLE的正确用法

Android 12 NFC开发实战&#xff1a;PendingIntent可变性标志的深度解析 在移动支付和门禁系统逐渐普及的今天&#xff0c;NFC技术已经成为现代智能手机不可或缺的功能之一。然而&#xff0c;随着Android系统的版本迭代&#xff0c;开发者们不得不面对各种兼容性挑战。特别是在…...

从LED灯变化理解计算机移位运算:手把手教你用实验箱验证带进位左移

从LED灯变化理解计算机移位运算&#xff1a;手把手教你用实验箱验证带进位左移 在计算机组成原理的学习中&#xff0c;移位运算是一个看似简单却蕴含深度的概念。当我们面对抽象的二进制数字在寄存器中"移动"时&#xff0c;往往难以形成直观理解。而通过实验箱上的L…...

vscode|无法连接到远程扩展主机服务器 (错误: CodeError(AsyncPipeFailed(Os { code: 2, kind: NotFound, message: “No such

无法连接到远程主机服务器&#xff08;错误&#xff1a; CodeError(AsyncPipeFailed(Os { code: 2, kind: NotFound, message: "No such file or directory" })))这是一个典型的 VSCode Remote-SSH 连接失败 错误。虽然本地网络正常、服务器在线&#xff0c;但 VSCod…...

PyTorch内存优化实战:深入解析torch.utils.checkpoint的机制与应用

1. 为什么我们需要torch.utils.checkpoint&#xff1f; 第一次用PyTorch训练ResNet50时&#xff0c;我的16GB显存直接被撑爆了。当时怎么都想不明白——明明batch_size只设了32&#xff0c;怎么连这种经典模型都跑不动&#xff1f;后来才发现&#xff0c;问题出在前向传播时PyT…...