在Python中,对象按可变属性可以分为可变对象和不可变对象两种。理解这两种对象的差异对于编写高效且易于维护的代码至关重要。本文将介绍Python中的可变对象和不可变对象,以及在使用它们时需要注意的事项。
1. 可变对象
Mutable objects can change their value but keep their id(). 1.1 列表(list) 列表是Python中最常见的可变对象之一。列表中的元素可以是任意类型,包括数字、字符串、布尔值等。列表的创建非常简单,只需使用方括号[]即可。 列表具有很多实用的操作方法,如添加元素、删除元素、修改元素等。例如:
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)可以是任意类型。字典的创建同样简单,只需使用大括号{}并在其中放置键值对即可。
字典也具有很多实用的操作方法,如添加键值对、删除键值对、修改键值对等。例如:
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)或指定索引的方式来访问元组中的元素。例如:
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)来获取字符串的子串,这实际上是创建了一个新的字符串对象。例如:
my_str = 'Hello, world!'
print(id(my_str))
sub_str = my_str[0:5] # 获取前5个字符
print(sub_str) # 输出:Hello
需要注意的是,当我们对字符串进行切片操作时,会创建一个新的字符串对象,而不会修改原始字符串。这是因为字符串在Python中是不可变的,任何对字符串的操作都会生成一个新的字符串对象。 除了切片操作外,我们还可以使用字符串的一些常用方法来处理字符串,如拼接、替换、分割等。这些方法都不会修改原始字符串,而是返回一个新的字符串对象。例如:
# 字符串拼接
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']
参考:
相关阅读:
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有