首页 > 编程语言 >python 深/浅拷贝及其区别

python 深/浅拷贝及其区别

时间:2024-09-06 09:14:49浏览次数:13  
标签:Copy 区别 python list 嵌套 拷贝 copy original

概述

1、什么是浅拷贝?

浅拷贝是指创建一个新的数据结构对象,该对象是原始数据结构的副本,但不复制原始数据结构中的嵌套对象的引用。浅拷贝可以通过各种方式完成,如切片、工厂函数或copy模块的copy方法。

2、什么是深拷贝?

深拷贝是指创建一个新的数据结构对象,该对象是原始数据结构及其所有嵌套对象的完整副本。深拷贝通常使用copy模块的deepcopy方法来完成。

3、区分浅拷贝和深拷贝

浅拷贝和深拷贝的区别在于它们是否复制了原始数据结构中的嵌套对象的引用。让我们通过示例代码来演示这一区别。

浅拷贝示例:

import copy

# 创建一个原始列表
original_list = [1, [2, 3], [4, 5], 9]

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

# 修改浅拷贝的元素
shallow_copy[1][0] = 6

# 修改浅拷贝2的元素
shallow_copy_2[-1] = 10

# 输出原始列表和浅拷贝
print("Original List:", original_list)
print("Shallow Copy:", shallow_copy)
print("Shallow Copy:", shallow_copy_2)

# 输出结果:
# Original List: [1, [6, 3], [4, 5], 9]  # 可见原列表对象的 嵌套list 的数值跟着改变了,但非嵌套结构的值是不会改变的
# Shallow Copy: [1, [6, 3], [4, 5], 9]  # 对嵌套列表内的值 做了更改
# Shallow Copy: [1, [6, 3], [4, 5], 10]  # 对 非嵌套其他其结构 的值做了更改

结果显示出浅拷贝只复制了原始数据结构的引用,而不复制嵌套对象的引用。这意味着修改浅拷贝会影响原始数据结构。

深拷贝示例:

import copy

# 创建一个原始列表
original_list = [1, [2, 3], [4, 5], 9]

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

# 修改深拷贝的元素
deep_copy[2][0] = 7
# 修改深拷贝2的元素
deep_copy_2[-1] = 8

# 输出原始列表和深拷贝
print("Original List:", original_list)

print("Deep Copy:", deep_copy)
print("Deep Copy:", deep_copy_2)

# 输出结果(深拷贝的修改对原对象不会进行改动):
# Original List: [1, [2, 3], [4, 5], 9]
# Deep Copy: [1, [2, 3], [7, 5], 9]
# Deep Copy: [1, [2, 3], [4, 5], 8]

标签:Copy,区别,python,list,嵌套,拷贝,copy,original
From: https://www.cnblogs.com/lanjianhua/p/18399577

相关文章

  • python 实现perfect square完全平方数算法
    python实现perfectsquare完全平方数算法介绍完全平方数(PerfectSquare)是一个整数,它可以表示为某个整数的平方。例如,1,4,9,16,25,…都是完全平方数,因为1=......
  • python 实现matrix exponentiation矩阵求幂算法
    matrixexponentiation矩阵求幂算法介绍矩阵求幂算法(MatrixExponentiation)是一种通过利用矩阵乘法的结合律来高效地计算矩阵的幂的算法。这种方法特别适用于在算法竞赛和计算机科学领域中解决需要快速计算矩阵幂的问题,如求解线性递推关系、图论中的路径计数等。基本思想......
  • 基于Python的彩妆销售管理系统 毕业设计-附源码04053
           摘要 身处互联网+时代,互联网无形中影响着人们的吃穿住行,人们享受着不出门便可购物的便利,网络购物在当今社会工作生活节奏飞快的今天备受欢迎,让人们购物不再受时间、地点的制约,高效快速。本次要开发的彩妆销售管理系统是基于当下互联网+时代而开发的一个......
  • 用 Python 解锁电影台词中的秘密:给孩子一个学英语的新奇方式
    引言想象一下:孩子们不仅在看他们喜欢的电影,还能从中学到新的英语单词!有没有什么比这更有趣、更高效的学习方式?在这篇博客中,我将带你一步步搭建一个Python工具,从电影台词中提取单词并生成详细的词汇报告。这不仅是一个强大的学习工具,还能让孩子们在享受电影的同时,潜移默化地......
  • Spring、SpringMVC、SpringBoot都是什么,有什么区别
    Spring、SpringMVC、SpringBoot都是什么,有什么区别Spring:是一个轻量级的基于IOC和AOP的容器框架,是用来简化开发流程的一套框架。IOC:InversionofController控制反转。不好理解的概念:应用不负责依赖对象的创建,而是把它们创建的控制器交给外部容器,这种控制权的转移就是控......
  • 基于python的贪吃蛇小游戏
    游戏规则1.玩家控制蛇在屏幕上移动(上下左右方向键),目标是吃到随机出现的食物。2.每次吃到食物后,蛇的长度会增加。3.游戏难度逐渐增加,蛇的移动速度会随着长度的增加而加快。4.如果蛇撞到自己或碰到墙壁,游戏结束。代码importtkinterastkimportrandomfromtkinter......
  • 【Python篇】PyQt5 超详细教程——由入门到精通(中篇一)
    文章目录PyQt5入门级超详细教程前言第4部分:事件处理与信号槽机制4.1什么是信号与槽?4.2信号与槽的基本用法4.3信号与槽的基础示例代码详解:4.4处理不同的信号代码详解:4.5自定义信号与槽代码详解:4.6信号槽的高级用法4.7总结第5部分:文件对话框与文件处理5.1什么......
  • [python][selenium] Web UI自动化页面切换iframe框架
    关联文章:WebUI自动化8种页面元素定位方式1、切换iframe的方法:switch_to.frame  方法的入参有4种:  1.1、id  1.2、name  1.3、index索引  1.4、iframe元素对象2、返回主文档(最外层的页面)的方法:switch_to.default_content()3、返回到上一级iframe的方法:switch_to.p......
  • Python中的“类的属性与方法”:解锁面向对象编程的奥秘
    在这个充满数据的世界里,Python作为一门强大的编程语言,已经成为了许多开发者的首选工具。而在Python中,类的属性与方法则是构建复杂系统不可或缺的一部分。它们不仅能够帮助我们更好地组织代码,还能提高程序的可读性和维护性。今天,就让我们一起探索类的属性与方法的魅力所在,从基础到进......
  • Python中的继承艺术:解锁代码复用的无限可能
    在编程的世界里,代码复用一直是一个备受关注的话题。而Python,作为一门优雅且强大的编程语言,提供了多种方式来帮助我们实现这一目标。其中,“继承”作为面向对象编程的一个核心概念,在Python中扮演着至关重要的角色。它不仅能够简化代码结构,提高开发效率,还能增强程序的可维护性和可扩展......