python可变对象,不可变对象详解

Python可变对象和不可变对象详解

在Python中,对象分为可变对象和不可变对象。对于可变对象,我们在操作它时可以改变它的值,而不可变对象在创建之后就无法改变。

Python的基本数据类型中有五种不可变对象:数字、字符串、元组、不可变集合和不可变字典。除此之外,其他类型都是可变对象,比如列表、字典、集合等。

不可变对象

数字

数字不可变是因为它们是按值传递的,这在Python中称为传递不可变的引用。这意味着数字变量只是对数字对象的引用,而不是数字本身。当你给一个数字变量重新赋值时,它实际上是创建了一个新的数字对象,并将变量的引用指向该新对象。

示例:

a = 1
print(id(a))    # 140722904519792

a = 2
print(id(a))    # 140722904519824

从上面的代码中可以看到,当我们将a赋值为2时,id(a)的值也改变了,这说明a现在指向的是一个新的数字对象。

字符串

字符串也是不可变的对象。这意味着当我们尝试修改一个字符串时,其实是创建了一个新的字符串对象,并将原始字符串对象的引用替换为新字符串对象的引用。

示例:

a = "hello world"
print(id(a))            # 140722904423024

a = a + "!"
print(id(a))            # 2934357370576

从上面的代码中可以看到,当我们将a赋值为"hello world!"时,id(a)的值也改变了,这说明a现在指向的是一个新的字符串对象。

可变对象

列表

列表是Python中最常用的可变对象之一。当我们在列表上进行任何操作时,它们是对原始对象进行操作,而不是创建一个新的副本。这意味着当我们修改列表中的一个元素时,列表对象本身不会发生变化,只是该元素的值会改变。

示例:

a = [1, 2, 3, 4]
print(id(a))            # 2934357362248

a[0] = 5
print(id(a))            # 2934357362248

print(a)                # [5, 2, 3, 4]

从上面的代码中可以看到,虽然我们改变了列表中的第一个元素,但列表对象本身的ID并没有改变。

字典

字典也是Python中可变对象之一。当我们在字典上进行任何操作时,它们也是对原始对象进行操作,而不是创建一个新的副本。这意味着当我们在字典中添加或删除键值对时,字典对象本身不会发生变化,只是其中的键值对会变化。

示例:

a = {'x': 1, 'y': 2}
print(id(a))            # 2934357361672

a['z'] = 3
print(id(a))            # 2934357361672

print(a)                # {'x': 1, 'y': 2, 'z': 3}

从上面的代码中可以看到,虽然我们在字典中添加了一个新的键值对,但是字典对象本身的ID并没有改变。

总结

Python中的可变对象和不可变对象是编程过程中需要了解和掌握的一个重要概念。对于不可变对象而言,我们需要注意每次操作时都会创建新的对象;而对于可变对象而言,我们需要注意对象本身的ID不会发生变化。在实际编程过程中,了解对象的可变性可以帮助我们更好地理解Python中的数据结构和算法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python可变对象,不可变对象详解 - Python技术站

(0)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • libreoffice python 操作word及excel文档的方法

    让我们来详细讲解一下“libreofficepython操作word及excel文档的方法”的完整实例教程。 简介 LibreOffice是一套完全开放源代码的办公软件套装,可用于文档处理、电子表格、演示文稿、数据库和绘图等方面。而LibreOffice的内部实际上是基于Python语言编写的,因此在Python中使用LibreOffice对Word及Exc…

    python 2023年5月13日
    00
  • python实现备份目录的方法

    让我来详细讲解“Python实现备份目录的方法”的完整攻略。该攻略主要包括以下内容: 确定备份目录 备份目录的复制方法 备份目录的归档和压缩 下面对每个内容进行详细说明: 1. 确定备份目录 首先,你需要确定要备份的目标目录。可以使用os模块中的os.listdir()函数列出目录下的所有文件和目录。 import os backup_dir = &quot…

    python 2023年6月3日
    00
  • Python和C/C++交互的几种方法总结

    对于“Python和C/C++交互的几种方法总结”,我们可以使用以下几种方法进行交互: 1. 使用Python扩展模块 这种方法是使用Python的C扩展模块,编写C/C++代码,然后将其编译为共享库,最后在Python程序中导入该共享库。来看一个实例: 编写C代码example.c: #include <Python.h> static PyO…

    python 2023年5月18日
    00
  • python密码学换位密码及换位解密转置加密教程

    Python密码学教程——换位密码及换位解密转置加密 什么是换位加密法 在密码学中,换位加密法(Transposition Cipher)是一种加密方式,它将明文中各个字符的位置调换来生成密文,从而达到加密的目的。具体来说,它将纯文本中的字符重新排列,但是不会改变字符本身。 换位加密法的分类 简单换位密码:将明文中的字符位置进行交换和调整,从而得到密文。 复…

    python 2023年5月20日
    00
  • 8行代码实现Python文件去重

    下面我会详细讲解“8行代码实现Python文件去重”的完整攻略。这个过程中包含以下步骤: 安装Python所需依赖库 创建去重脚本 运行脚本进行去重 1. 安装Python所需依赖库 在开始使用Python进行文件去重之前,我们需要安装一个名叫pandas的Python依赖库。可以使用以下命令进行安装: pip install pandas 这个命令将会在你…

    python 2023年6月5日
    00
  • python 正则表达式如何实现重叠匹配

    Python正则表达式中的重叠匹配是指一个字符串中有多个子字符串都能匹配同一个正则表达式,但是这些子字符串之间可能存在重叠的部分。下面是实现重叠匹配的两个示例: 示例一 当我们需要匹配一个长字符串中可能出现的重叠子字符串时,我们可以使用正则表达式中的“|”(或运算符)以及“(?=(regex))”(正则表达式中的前瞻)结合使用。具体的步骤如下: 假设需要匹配…

    python 2023年6月3日
    00
  • Python实现KNN邻近算法

    Python实现KNN邻近算法的完整攻略 KNN算法是一种常用的机器学习算法,用于分类和回归问题。本文将详细讲解Python实现KNN算法的整个攻略,包括算法原理实现过和示例。 算法原理 KNN算法的基本思想是通过计算待分类样本与训练集中所有样本距离选取距近的k样本,根据这k个样本的类别进行投票,将待分类样归票数多的类别。在回归中,KNN算法的基本思想是通过…

    python 2023年5月14日
    00
  • Pandas读取并修改excel的示例代码

    下面是一份示例代码和相应的实现步骤,用于演示如何使用Pandas读取和修改Excel文件: 读取Excel文件 首先,我们需要导入Pandas库来读取Excel文件。具体代码如下: import pandas as pd # 读取Excel文件并存储为DataFrame对象 data = pd.read_excel(‘example.xlsx’) # 显示D…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部