Python中可变对象和不可变对象的区别

本文深入解析Python中的对象概念,包括抽象、容器及对象的三大特征:标识符、类型与值。探讨了可变与不可变对象的区别,通过列表与元组的实例展示了对象在内存中的行为变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本概念

首先要分清几个概念,什么是对象?什么是抽象?什么是容器?对象有什么特征?
根据python文档总结如下:文档>>Python语言参考>>3.数据模型
① 抽象:从具体事物抽出、概括出它们共同的方面、本质属性与关系等,而将个别的、非本质的方面、属性与关系舍弃的思维过程
② 对象是 Python 中对数据的抽象,Python程序中的所有数据都是由对象或对象间关系来表示的
③ 容器:一些对象包含对其他对象的引用,这些对象称为容器,如列表,元组,字典
④ 对象的三个特征
标识符 (identity):唯一不可更改,可理解为对象在内存中的地址,is操作符可比较两个对象的 identity,id() 函数返回一个对象的 identity
类型 (type):决定对象操作和取值,不可更改
值 (value):有些对象的值可以改变,值可以改变的对象被称为可变的 (mutable),值不可以改变的对象就被称为不可变的 (immutable)


可变对象和不可变对象

① 数字,字符串,元组为不可变,字典和列表可变
② 在这里要注意对于容器而言可变和不可变有所不同,如果一个不可变 tuple 容器包含对可变对象的引用,当可变对象值改变的时候 tuple 的值也会改变
但是 tuple 仍然是不可变的,因为包含的可变对象的 id 不变
下面会以 list 和 tuple 具体举例分析

>>> list = ['a', 'b']
>>> id(list)        # 列表唯一id
60968648L
>>> id(list[0])     # 包含对象id
59715296L
>>> list[0] = 'c'
>>> list
['c', 'b']
>>> id(list)        # 列表唯一id不变
60968648L
>>> id(list[0])     # 新对象被构造,即id改变
59711896L
>>> tuple = (['a', 'b'], 'c')
>>> id(tuple)       # 元组唯一id
61112904L
>>> id(tuple[0])    # 元组包含对象id
61114184L
>>> tuple[0][1] = 'z'
>>> tuple      
(['z', 'b'], 'c')
>>> id(tuple)       # 元组唯一id
61112904L
>>> id(tuple[0])    # 无新对象构造,包含的列表id不变,列表值改变
61114184L
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值