首页 > 其他分享 >浅谈深浅拷贝

浅谈深浅拷贝

时间:2023-12-06 16:25:06浏览次数:29  
标签:浅谈 对象 嵌套 复制 深浅 原始 拷贝 copy

【一】深浅拷贝

深拷贝(deep copy)和浅拷贝(shallow copy)是在Python中用于复制对象的两种方式。它们的作用如下:

1.浅拷贝:浅拷贝创建一个新的对象,但是该新对象的元素是对原始对象的引用。换句话说,浅拷贝只复制了对象的引用,而不是对象本身。当原始对象中的元素发生变化时,浅拷贝的对象也会受到影响。

2.深拷贝:深拷贝创建一个全新的对象,并且递归地复制原始对象及其所有嵌套的对象。换句话说,深拷贝会复制对象的所有内容,包括对象本身和其嵌套的对象。深拷贝的对象与原始对象完全独立,互不影响。

深拷贝和浅拷贝的选择取决于你希望如何处理复制后的对象。如果你想创建一个独立的对象,不受原始对象的影响,就应该使用深拷贝。
如果你只需要一个简单的副本,并且对原始对象的更改不会影响到副本,那么可以使用浅拷贝。

在Python中,可以使用copy模块来进行深拷贝和浅拷贝。copy模块提供了copy()函数和deepcopy()函数来执行相应的拷贝操作。

下面是一个示例,演示了深拷贝和浅拷贝的区别:

import copy

# 原始列表
original_list = [1, 2, [3, 4]]

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

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

# 修改原始列表中的元素
original_list[0] = 5
original_list[2][0] = 6

# 输出结果
print("原始列表:", original_list)
print("浅拷贝:", shallow_copy)
print("深拷贝:", deep_copy)

1.1 - 深浅拷贝的区别

深拷贝和浅拷贝的区别如下:

1.复制方式:浅拷贝只复制对象的引用,而深拷贝会递归地复制对象及其所有嵌套的对象。

2.对象独立性:浅拷贝创建一个新的对象,但其嵌套的对象仍然是原始对象中嵌套对象的引用。深拷贝创建一个全新的对象,包括嵌套的对象,使得新对象与原始对象完全独立。

3.对原始对象的影响:对原始对象进行修改时,浅拷贝的对象会受到影响,而深拷贝的对象不会受到影响。

4.性能和资源消耗:由于深拷贝需要递归地复制对象及其所有嵌套的对象,因此执行深拷贝可能需要更多的时间和内存资源。

总结起来,浅拷贝只复制对象的引用,而深拷贝复制整个对象及其嵌套的对象。浅拷贝的对象与原始对象共享嵌套对象,因此对嵌套对象的修改会影响到浅拷贝的对象。深拷贝创建完全独立的对象,对原始对象的修改不会影响到深拷贝的对象。

在实际应用中,根据需要选择适当的拷贝方式,以确保复制后的对象的行为符合预期。

标签:浅谈,对象,嵌套,复制,深浅,原始,拷贝,copy
From: https://www.cnblogs.com/wx-x/p/17879784.html

相关文章

  • 不含指针的结构体赋值实现,直接内存拷贝
    #include<stdio.h>#include<stdlib.h>structA{ intc; charb[20]; charstrs[10][10]; intk;};intmain(){ //Aa={...};//帮我初始化 structAa={ 1,//Initializecwithsomeinteger "ExampleString",//Initialize......
  • 深拷贝和浅拷贝
    在C++中,深拷贝和浅拷贝是两种不同的对象复制方式:浅拷贝:当我们创建一个对象的副本时,如果仅仅复制所有成员变量的数据,那么这就是浅拷贝。这在所有的变量都在栈内存中分配时工作得很好1。但是,如果有些变量是在堆内存中动态分配的,那么复制的对象变量也会引用同一块内存位置1。......
  • 浅谈如何防止sql注入
    ✨前言✨本篇文章主要在于了解SQL注入攻击原理及防御策略......
  • JS赋值、浅拷贝、深拷贝的区别
    在说明它们的区别之前,首先需要了解JS的数据类型和它们的存放位置。  数据类型基本数据类型:String、Number、Boolean、Undefined、Null、Symbol(es6)、BigInt(es6)引用数据类型:Object  存放位置基本数据类型是存放在栈中的数据段,直接存储的就是值本体。引用数据类型是存......
  • 浅谈一类高斯求和问题
    引入相信大家都知道高斯求和公式:首项加末项的和乘项数除以二等于等差数列的和。实际应用中往往不会这么简单,常常会告诉你等差数列的和然后让你反过来求等差数列的信息,这时候对于边界的处理就很重要。P1014[NOIP1999普及组]Cantor表显然可以\(O(N)\)模拟,但这太慢了。先......
  • 「智造」第10期:浅谈工业互联网加速企业服务化转型
    01价值引领在新型工业化和数智化技术发展趋势之下,柔性化生产、网络化协同、服务化延伸促使制造企业的生产方式发生转变,数据资产、平台技术、生态能力成为了重要的生产要素。目标都是要为企业实现价值提升、业务的增长和创新。无论是纵向的从采购、制造到营销的运营管理链路,还是横向......
  • docker 拷贝docker中文件,并获取最新
    1、2、#!/bin/bashdate_str=$(date+_%Y_%m_%d_%H_%M_%S.sql.gz)echo'开始备份数据'$date_str#获取容器idmysqlid=`dockerps-aqf"name=mysql57"`#进入mysql容器dockerexec-i${mysqlid}/bin/bash<<'EOF'mysqldump-hlocalhost-uroot......
  • Python之深浅拷贝
    浅copy:   1.是把列表本身独立,里面的元素是被两个列表共享的   2.当其中一个列表中的元素被改变时,另一个列表中的元素不会随之变化。   3.当列表里面还有列表时,修改内部列表的内容时,另一个列表中的内部列表也会随之变化a1=["a","b","c","aa"]b1=a1a1[0]="1"prin......
  • 浅谈为什么重写equals方法,就要必须重写hashcode方法
    在hashmap中是要保证key的唯一,如果新的key放入map中,发现和已有的key相同,那么就要覆盖。那么这个“唯一”是怎么确定的?或者说怎么认为两个key是相同的?那么这里的相同是指内容相同,比如newString("aaa"),newString("aaa"),new了两个字符串,是两个对象,但是内容是相同的,我们认为他们......
  • 浅谈智能充电桩系统设计
    安科瑞张田田摘要:文章设计了一款电动车智能充电系统,以智能充电桩为数据采集终端,将采集到的电压电流等信息上传给服务器,数据库接受到信息后进行分析并同时传输到客服端。该系统实现了安全高效充电、数据分析、公平计费、节能环保等功能,很大地提高了用户体验,能够有效管理和控制电动车......