Python中可变和不可变对象的深入讲解

Python中可变和不可变对象的深入讲解

在Python中,对象分为可变对象和不可变对象。在程序中使用对象时,了解它们的可变性是至关重要的。

不可变对象

不可变对象一旦被创建,就不能被改变。在Python中,整数、浮点数、字符串、元组和冻结集合(frozenset)都是不可变对象。

举个例子:

a = 10
b = a
a = 20
print(a, b)   # 输出 20 10

在上面的例子中,整数10是不可变对象,所以当我们将a的值赋给b时,实际上是创建了一个新的对象,并将该对象的引用赋给b。当我们改变a的值时,实际上是创建了一个新的对象并将该对象的引用赋给a。

再看一个例子:

s = "hello"
t = s
s += " world"
print(s, t)   # 输出 hello world hello

在上面的例子中,字符串s是一个不可变对象,当我们将s的值赋给t时,实际上是将t指向了同一个对象。当我们使用加号操作符给s添加一个新的字符串时,实际上是创建了一个新的字符串,并将该字符串的引用赋给s,而不是修改原始的字符串。t仍然指向原始的字符串。

可变对象

可变对象在创建后可以被改变。在Python中,列表、字典、集合和自定义的类实例都是可变对象。

举个例子:

a = [1, 2, 3]
b = a
a.append(4)
print(a, b)  # 输出 [1, 2, 3, 4] [1, 2, 3, 4]

在上面的例子中,列表a是一个可变对象,当我们将a的引用赋给b时,实际上是将b指向了同一个对象。当我们通过append()方法改变a的值时,实际上是在原始的列表上添加了一个新的元素,并没有创建一个新的对象。因此,b也会发生改变。

再看一个例子:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

p1 = Person("John", 30)
p2 = p1
p1.age = 40
print(p1.age, p2.age)  # 输出 40 40

在上面的例子中,我们定义了一个名为Person的类,它有两个属性:name和age。对象p1和p2都是Person类的实例,当我们将p1的引用赋给p2时,实际上是将p2指向了同一个对象。我们通过修改p1的属性值来改变对象的状态,p2也会受到影响。

总结

  • 不可变对象在创建后不能被改变。整数、浮点数、字符串、元组和冻结集合(frozenset)都是不可变对象。
  • 可变对象在创建后可以被改变。列表、字典、集合和自定义的类实例都是可变对象。
  • 在使用对象时,了解它们的可变性是至关重要的,因为已经使用的对象可能会被改变。
  • 如果你想创建一个不可变对象,可以使用元组或者frozenset类型。
  • 如果你想创建一个可变对象,可以使用列表、字典或者集合类型。

希望这篇攻略能够帮助你更好地理解Python中的可变和不可变对象。

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

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

相关文章

  • Python利用正则表达式从字符串提取数字

    在Python中,可以使用正则表达式从字符串中提取数字。本文将为您详细讲解Python利用正则表达式从字符串提取数字的完整攻略,包括正达式的语法、re块的常用方法和两个示例说明。 正则表达式的语法 在正则表达式中,使用\d匹配数字,使用+表示匹配前一个字符1次或多次,使用*表示匹配前一个字符0次或次,使用?表示匹配前一个字符0次或1次。下面是一些常用的正则表…

    python 2023年5月14日
    00
  • python 根据列表批量下载网易云音乐的免费音乐

    下面我将详细讲解“python 根据列表批量下载网易云音乐的免费音乐”的完整攻略。 1. 确认目标 首先要明确目标,即要批量下载的音乐是网易云音乐的免费音乐,而且我们需要提供一个音乐链接列表。 2. 安装必要的库 接着需要安装两个必要的Python库,一个是requests,用于获取API数据,另一个是pydub,用于处理音频文件。 pip install …

    python 2023年6月3日
    00
  • python调用API接口实现登陆短信验证

    Python调用API接口实现登录短信验证 在本文中,我们将介绍如何使用Python调用API接口实现登录短信验证。我们将使用requests库发送HTTP请求,并使用json库解析响应。 步骤1:导入必要的库 在使用Python调用API接口实现登录短信验证之前,我们需要先导入必要的库: import requests import json 在上面的示例…

    python 2023年5月15日
    00
  • python实现读取excel文件中所有sheet操作示例

    下面是“Python实现读取Excel文件中所有Sheet操作示例”的完整实例教程: 1. 安装依赖库 在使用Python读取Excel文件之前,需要安装一个名为openpyxl的Python库,它可以方便地读取、处理和写入Excel文件。在命令行中输入以下命令来安装: pip install openpyxl 2. 读取Excel文件中所有Sheet 接下…

    python 2023年5月13日
    00
  • Python实现随机从图像中获取多个patch

    下面我将详细讲解实现“Python实现随机从图像中获取多个patch”的攻略。 步骤1:导入必要的库 使用Python时,首先要导入相关的库。在这个过程中,我们所需要用到的库有numpy、cv2和PIL。 import numpy as np import cv2 from PIL import Image 步骤2:读取图像 使用OpenCV库读取图像,并将…

    python 2023年6月3日
    00
  • Python实现基于权重的随机数2种方法

    实现基于权重的随机数,在Python中有至少两种常见的方法:轮盘法和分段函数法。下面将分别进行详细介绍和代码实现。 方法1:轮盘法 简介 轮盘法是一种基于概率的产生随机数的算法。可以根据给定元素的权重值,计算出每个元素上的权重区间,再将这些区间按顺序排列,在一个[0,1)的随机数范围内生成一个随机数,最后根据这个随机数所在的区间,确定选中的元素。 实现步骤 …

    python 2023年6月3日
    00
  • 比特币偷窃程序Dyreza的实现思路分析

    比特币偷窃程序Dyreza的实现思路分析 背景 Dyreza是一款专门用于窃取用户账户信息的木马程序,主要针对金融机构的客户进行攻击,其中包括比特币交易所。通过Dyreza木马,攻击者可以窃取用户的用户名、密码、证书等敏感信息,然后通过连接远程C&C服务器实现数据的上传和控制。 实现思路 活动记录器 Dyreza的首要目的是收集用户的账户信息,因此它…

    python 2023年6月2日
    00
  • Python列表创建与销毁及缓存池机制

    在Python中,列表是一种非常常见的数据类型。本文将详细讲解Python列表的创建与销毁以及缓存池机制。 列表的创建与销毁 创建列表 在Python中,可以使用方括号[]或list()函数来一个列表。下面是两个示例: # 示例1:使用方括号[]创建列表 lst1 = [1, 2, 34, 5] # 示例2:使用list()函数创建列表 lst2 = lis…

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