首页 > 编程语言 >python 的深浅拷贝

python 的深浅拷贝

时间:2024-02-27 16:47:43浏览次数:33  
标签:python list 列表 原始 深浅 拷贝 copy original

python 的深浅拷贝

在Python中,深拷贝(deep copy)和浅拷贝(shallow copy)是用于复制数据结构(如列表或字典)的两种不同方式,它们有以下区别:

浅拷贝(Shallow Copy):

浅拷贝创建一个新的对象,然后将原始对象中的元素(如果是可变对象)复制到新对象中。但是,如果元素本身也是一个可变对象,则新对象中的元素和原始对象中的元素将共享相同的内存地址,因此修改其中一个对象中的元素会影响到另一个对象中相同位置的元素。
浅拷贝可以使用 copy() 方法来实现,或者使用切片操作符 [:]。
深拷贝(Deep Copy):

深拷贝创建一个新的对象,并且递归地复制原始对象中的所有元素及其嵌套对象,因此新对象中的元素与原始对象中的元素完全独立,彼此之间没有关联。
深拷贝可以使用 copy.deepcopy() 函数来实现。
下面是深拷贝和浅拷贝的示例:

import copy

# 原始列表
original_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

# 浅拷贝
shallow_copy = copy.copy(original_list)

# 修改原始列表中的一个元素
original_list[0][0] = 100

# 打印浅拷贝和原始列表
print("浅拷贝:", shallow_copy)
print("原始列表:", original_list)

# 深拷贝
deep_copy = copy.deepcopy(original_list)

# 修改原始列表中的一个元素
original_list[1][1] = 200

# 打印深拷贝和原始列表
print("深拷贝:", deep_copy)
print("原始列表:", original_list)

输出结果如下所示:

浅拷贝: [[100, 2, 3], [4, 5, 6], [7, 8, 9]]
原始列表: [[100, 2, 3], [4, 5, 6], [7, 8, 9]]
深拷贝: [[100, 2, 3], [4, 5, 6], [7, 8, 9]]
原始列表: [[100, 2, 3], [4, 200, 6], [7, 8, 9]]

可以看到,浅拷贝的列表中的第一个子列表被修改后,浅拷贝中的对应元素也被修改了,而深拷贝则不受影响。

标签:python,list,列表,原始,深浅,拷贝,copy,original
From: https://www.cnblogs.com/QiaoPengjun/p/18037184

相关文章

  • python中的列表和元组有什么区别
    python中的列表和元组有什么区别在Python中,列表(List)和元组(Tuple)都是用来存储一组有序元素的数据结构,它们之间有几个重要的区别:可变性:列表是可变的(Mutable),意味着你可以改变列表中的元素,包括添加、删除、修改元素。元组是不可变的(Immutable),一旦创建后就无法修改。你不能在元组中......
  • 爬取网页曲线图的后台数据——Python实现
    爬取网页曲线图数据的应用十分广泛。在市场分析领域,投资者可以通过分析金融网站上的股票曲线图数据来了解股市趋势,从而做出更明智的投资决策。在科学研究中,研究人员可以通过爬取科学期刊网站上的曲线图数据来分析实验结果,推动科学进步。在气象领域,气象学家可以通过爬取气象网站上......
  • python基础知识
    《跟着孙兴华学Python基础》一、常见数据类型字符串:不能修改的字符序列。除了不能修改,可把字符串当成列表一样处理。列表:我觉得列表就是我们日常生活中经常见到的清单。比如,统计过去一周我们买过的东西,把这些东西列出来,就是清单。由于我们买一种东西可能不止一次,所以清单中是允......
  • 使用python批量删除redis key
     比如我的业务。刚上线默认为超级管理员新增权限--请导出id用于清缓存svc格式请注意分页需要导出全部selectCONCAT('@rbac/ent/aclgr/',e.id)as需要清理缓存的rediskeyfroment_rbac_groupewherenotexists(selectp.`groupid`froment_rbac_group_permissionp......
  • Python 中动态调用函数或类的方法
    使用importlib#module.pyclassA:deffoo(self):print('thisisfoo.')@staticmethoddefstatic_method():print('thisisstatic.')defbar():print('bar……')defbaz():print('==......
  • Vue+Vite+Ts+Python后端demo
    一、创建前端工程1.安装node进入官网下载:Node.js(nodejs.org) 选择安装路径后,默认安装;确认是否成功安装: 2.创建vite项目①:npminitvite@latest②:输入项目名、选择Vue、选择Ts;cd到项目文件夹里;安装依赖项:npmi,启动项目:npmrundev③:打开浏览器,进入:http://localhost:5......
  • Python3中的“联动”现象
    技术背景在python中定义一个列表时,我们一定要注意其中的可变对象的原理。虽然python的语法中没有指针,但是实际上定义一个列表变量时,是把变量名指到了一个可变对象上。如果此时我们定义另外一个变量也指到同一个可变对象的话,就会造成一个“联动”的现象。也就是改变其中的一个值时......
  • python3的json数据库-TinyDB效率篇
    安装了这个TinyDB库后,我突然想到一般来说python执行的速度并不算高,那这个库写文件速度如何呢?测试代码如下:fromtinydbimportTinyDBimporttime#创建数据库对象db=TinyDB('db.json')milliseconds1=int(time.time()*1000)db.insert({'type':'apple','count':......
  • Python函数每日一讲 - 简洁快速学会globals()函数
    引言在Python中,globals()函数是一个强大的工具,它允许您访问全局命名空间中的所有变量和函数。本文将深入探讨globals()函数的语法、用法以及实际应用场景,帮助大家更好地理解和使用这个函数。语句概览globals()函数的语法如下:globals()函数实例下面是globals()函数......
  • python3的json数据库-TinyDB
    无意间看到TinyDB这个词汇,就去查了一下,就发现了它的官方网站这里然后就是按照他说的步骤去做。第1步安装  pip3installtinydb 安装成功后,创建一个文件名字叫做 test.py,输入下面的代码:fromtinydbimportTinyDB,Query#创建数据库对象db=TinyDB('db.json')#......