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日

相关文章

  • Python实现登录人人网并抓取新鲜事的方法

    Python实现登录人人网并抓取新鲜事的方法可以分为以下几个步骤: 1.导入requests和BeautifulSoup模块 import requests from bs4 import BeautifulSoup 2.获取登录页面信息,分析登录页面的HTML结构并提取需要post的数据 login_url = ‘http://www.renren.com…

    python 2023年6月3日
    00
  • Python实现清除文件夹中重复视频

    Python实现清除文件夹中重复视频攻略 1. 分析问题 首先,我们需要分析问题,我们要清除文件夹中的重复视频。可以想到两种方法: 检查每一个视频文件,查看它们的 MD5 值是否相同。 对每一个视频文件提取出视频的特征向量,然后通过计算余弦相似度来判断是否为相同的文件。 第一种方法比较简单,但对于大型数据集不太实用。我们将使用第二种方法。由于视频文件比较大,…

    python 2023年6月2日
    00
  • python实现教务管理系统

    Python实现教务管理系统攻略 教务管理系统是学校或机构必备的一种软件,它可以管理学生信息、考试成绩、课程安排、选课情况等内容,并对各项信息进行数据分析和报告生成等操作。本文将介绍如何用Python实现一个基础的教务管理系统,包括系统架构设计、模块划分、数据存储方式、API设计等细节。 系统架构设计 我们将教务管理系统划分为以下几个模块: 用户管理模块 包…

    python 2023年5月30日
    00
  • python对Excel的读取的示例代码

    下面是Python读取Excel的完整实例教程: 1. 安装依赖库 在Python中读取Excel文件需要使用到openpyxl库,如果还没有安装,可以使用以下命令进行安装: pip install openpyxl 2. 读取Excel文件 在Python中读取Excel文件可以使用openpyxl库中的load_workbook()方法,示例代码如下: …

    python 2023年5月13日
    00
  • 彻底吃透理解Python基础33个关键字详细教程

    彻底吃透理解Python基础33个关键字详细教程攻略 为什么需要掌握33个关键字 Python是一门开放性的高级编程语言,相比其他语言,Python的语法相对简单,并且有着丰富的库和模块,使得编程变得容易。然而要想真正掌握Python的使用,必须首先熟悉Python的关键字。Python的关键字是指Python编程语言中拥有特定含义并且被保留的单词。通过掌握…

    python 2023年5月13日
    00
  • python中argparse模块用法实例详解

    Python中argparse模块用法实例详解 argparse是Python标准库中的一个命令行解析模块,可以帮助开发者轻松地编写命令行接口。以下是Python中argparse模块用法实例详解: 基本用法 以下是一个基本的示例,演示如何使用argparse模块解析命令行参数: import argparse parser = argparse.Argum…

    python 2023年5月14日
    00
  • Python创建多线程的两种常用方法总结

    Python创建多线程有两种常用的方法:使用 threading 模块和继承 threading.Thread 类。下面我将为你详细讲解这两种方法。 利用 threading 模块创建多线程 利用 threading 模块可以创建多线程,具体操作如下: 导入 threading 模块。 import threading 创建线程。使用 Thread() 函数…

    python 2023年6月6日
    00
  • python2.7实现爬虫网页数据

    当使用Python 2.7进行网络爬虫的时候,首先需要安装requests库,该库可以在Python代码中进行网络请求。 pip install requests 接下来,我们需要从一个URL中获取HTML内容。使用requests库可以轻松实现这一操作。 import requests response = requests.get(‘https://ww…

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