前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >python可变对象和不可变对象

python可变对象和不可变对象

作者头像
程序熵
发布于 2023-09-25 03:06:02
发布于 2023-09-25 03:06:02
76000
代码可运行
举报
文章被收录于专栏:技术汇技术汇
运行总次数:0
代码可运行

Python中,对象按可变属性可以分为可变对象和不可变对象两种。理解这两种对象的差异对于编写高效且易于维护的代码至关重要。本文将介绍Python中的可变对象和不可变对象,以及在使用它们时需要注意的事项。

1. 可变对象

Mutable objects can change their value but keep their id(). 1.1 列表(list) 列表是Python中最常见的可变对象之一。列表中的元素可以是任意类型,包括数字、字符串、布尔值等。列表的创建非常简单,只需使用方括号[]即可。 列表具有很多实用的操作方法,如添加元素、删除元素、修改元素等。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
my_list = [1, 2, 3, 4, 5]
print(id(my_list))

# 添加元素
my_list.append(6)
print(my_list)  # 输出:[1, 2, 3, 4, 5, 6]
print(id(my_list))

# 删除元素
my_list.remove(3)
print(my_list)  # 输出:[1, 2, 4, 5, 6]
print(id(my_list))

# 修改元素
my_list[0] = 0
print(my_list)  # 输出:[0, 2, 4, 5, 6]
print(id(my_list))

1.2 字典(dict)

字典是Python中另一种常见的可变对象。字典是一种键值对(key-value)的数据结构,其中键(key)是唯一的,而值(value)可以是任意类型。字典的创建同样简单,只需使用大括号{}并在其中放置键值对即可。

字典也具有很多实用的操作方法,如添加键值对、删除键值对、修改键值对等。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
my_dict = {'name': '马一龙', 'age':  34, 'gender': 'male'}
print(id(my_dict))

# 添加键值对
my_dict['city'] = '深圳'
print(id(my_dict))
print(my_dict)  # 输出:{'name': '马一龙', 'age':  34, 'gender': 'male', 'city': '深圳'}

# 删除键值对
del my_dict['gender']
print(id(my_dict))
print(my_dict)  # 输出:{'name': '马一龙', 'age':  34, 'city': '深圳'}

# 修改键值对
my_dict['age'] = 35
print(id(my_dict))
print(my_dict)  # 输出:{'name': '马一龙', 'age': 35, 'city': '深圳'}

2. 不可变对象

An object with a fixed value. Immutable objects include numbers, strings and tuples. Such an object cannot be altered. A new object has to be created if a different value has to be stored. They play an important role in places where a constant hash value is needed, for example as a key in a dictionary.

2.1 元组(tuple) 元组是Python中的一种不可变对象。元组中的元素可以是任意类型,包括数字、字符串、布尔值等。元组的创建非常简单,只需使用圆括号()即可。 由于元组是不可变的,因此不能对其进行添加、删除或修改元素的操作。但是,可以使用切片(slicing)或指定索引的方式来访问元组中的元素。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
my_tuple = (1, 2, 3, 4, 5)

# 切片
print(my_tuple[1:4])  # 输出:(2, 3, 4)

#指定索引
print(my_tuple[2])  # 输出:3

2.2 字符串(str) 在Python中,字符串是不可变对象之一。字符串是由字符组成的序列,用于表示文本信息。创建字符串非常简单,只需使用单引号'或双引号"将字符括起来即可。 虽然字符串本身是不可变的,但我们可以通过切片(slicing)来获取字符串的子串,这实际上是创建了一个新的字符串对象。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
my_str = 'Hello, world!'
print(id(my_str))
sub_str = my_str[0:5]  # 获取前5个字符
print(sub_str)  # 输出:Hello

需要注意的是,当我们对字符串进行切片操作时,会创建一个新的字符串对象,而不会修改原始字符串。这是因为字符串在Python中是不可变的,任何对字符串的操作都会生成一个新的字符串对象。 除了切片操作外,我们还可以使用字符串的一些常用方法来处理字符串,如拼接、替换、分割等。这些方法都不会修改原始字符串,而是返回一个新的字符串对象。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 字符串拼接
my_str = my_str + ' Python'
print(id(my_str))
print(my_str)  # 输出:Hello, world! Python

# 字符串替换
new_str = my_str.replace('Python', 'PyPI')
print(new_str)  # 输出:Hello, world! PyPI

# 字符串分割
words = my_str.split(' ')
print(words)  # 输出:['Hello,', 'world!', 'Python']

参考:

  • https://docs.python.org/3/glossary.html#term-immutable
  • https://docs.python.org/3/glossary.html#term-mutable

相关阅读:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-09-25 05:25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序熵 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档