赋值 浅拷贝 深拷贝

news/2024/10/23 21:44:34/

赋值操作

赋值操作(如 b = a)只是将变量 b 指向变量 a 当前指向的对象。这意味着 b 和 a 引用同一个对象。如果对象是可变的(如列表、字典),对对象的修改会反映在所有引用该对象的变量上。

a = [1, 2, 3]
b = a
a[0] = 99
print(a)  # 输出: [99, 2, 3]
print(b)  # 输出: [99, 2, 3]

在这个例子中,a 和 b 引用同一个列表对象。修改 a 的元素会同时影响 b

拷贝操作

拷贝操作会创建一个新的对象,新对象的内容与原对象相同,但它们是不同的对象。Python 提供了多种拷贝方式,包括浅拷贝和深拷贝。

浅拷贝

浅拷贝会创建一个新的对象,但新对象中的子对象仍然是原对象中子对象的引用。

import copya = [1, [2, 3], 4]
b = copy.copy(a)
a[0] = 99
a[1][0] = 88
print(a)  # 输出: [99, [88, 3], 4]
print(b)  # 输出: [1, [88, 3], 4]

在这个例子中,a 和 b 是不同的列表对象,但它们包含的子列表是同一个对象。因此,修改子列表会影响 a 和 b

深拷贝

深拷贝会创建一个新的对象,并且递归地拷贝原对象中的所有子对象。新对象和原对象是完全独立的。

import copya = [1, [2, 3], 4]
b = copy.deepcopy(a)
a[0] = 99
a[1][0] = 88
print(a)  # 输出: [99, [88, 3], 4]
print(b)  # 输出: [1, [2, 3], 4]

在这个例子中,a 和 b 是完全独立的列表对象,修改 a 不会影响 b

总结

  • 赋值操作:只是将变量指向同一个对象,对对象的修改会影响所有引用该对象的变量。

  • 浅拷贝:创建一个新的对象,但子对象仍然是原对象中子对象的引用。

  • 深拷贝:创建一个新的对象,并且递归地拷贝所有子对象,新对象和原对象是完全独立的。

可变对象(Mutable Objects)

可变对象是指在创建后可以修改其内容的对象。常见的可变对象包括:

  • 列表(List):可以通过索引和切片修改元素。

  • 字典(Dictionary):可以通过键修改值。

  • 集合(Set):可以添加和删除元素。

不可变对象(Immutable Objects)

不可变对象是指在创建后不能修改其内容的对象。常见的不可变对象包括:

  • 整数(int)

  • 浮点数(float)

  • 字符串(str)

  • 元组(tuple)

  • 布尔值(bool


http://www.ppmy.cn/news/1541448.html

相关文章

计算机毕业设计 | vue+springboot 在线花店后台管理系统(附源码)

1,绪论 1.1 项目背景 随着社会发展,网上购物已经成为我们日常生活的一部分。但是,至今为止大部分电商平台都是从人们日常生活出发,出售都是一些日常用品比如:食物、服装等等,并未发现一个专注于鲜花的电商…

Python GUI 编程:tkinter 初学者入门指南——复选框

在本文中,将介绍 tkinter Checkbox 复选框小部件以及如何有效地使用它。 复选框是一个允许选中和取消选中的小部件。复选框可以保存一个值,通常,当希望让用户在两个值之间进行选择时,可以使用复选框。 要创建复选框,…

RISC-V笔记——显式同步

1. 前言 RISC-V的RVWMO模型主要包含了preserved program order、load value axiom、atomicity axiom、progress axiom和I/O Ordering。今天主要记录下preserved program order(保留程序顺序)中的Explicit Synchronization(显示同步)。 2. 显示同步 显示同步指的是&#xff1a…

基于微信小程序的智能社区服务管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

Docker 安装Postgres和PostGIS,并制作镜像

1. 查找postgres和postgis现有的镜像和版本号 镜像搜索网站:https://docker.aityp.com/ 测试使用的是postgres:15.4 和 postgis:15-3.4 2、镜像拉取 docker pull postgres:15.4docker pull postgis/postgis:15-3.4镜像下载完成,docker images 查看如…

CIM+全场景应用,铸就智慧城市发展新篇

在数字化浪潮的推动下,智慧城市建设正成为全球城市发展的新趋势。而CIM(城市信息模型)作为智慧城市建设的核心,正以其强大的数据集成和分析能力,引领着城市发展的新篇章。今天,让我们一起探讨CIM全场景应用…

C#中的LINQ之美:优雅的数据查询与操作

LINQ(Language Integrated Query,语言集成查询)是C#中一个强大的工具,它将查询功能直接融入到语言中,使开发者能够以一种更直观、更接近自然语言的方式来操作数据。LINQ不仅能极大地提高开发效率,而且让代码…

PHP如何实现页面跳转

在PHP中,实现页面跳转有多种方法,这些方法包括使用HTTP头信息、JavaScript以及Meta标签。 方法一:使用HTTP头信息 PHP可以使用header()函数发送HTTP头信息来实现页面跳转。这是最常用和推荐的方式,因为它不需要依赖客户端的Java…