python可变对象和不可变对象

python可变对象和不可变对象

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

1. 可变对象

Mutable objects can change their value but keep their id().

1.1 列表(list)

列表是Python中最常见的可变对象之一。列表中的元素可以是任意类型,包括数字、字符串、布尔值等。列表的创建非常简单,只需使用方括号[]即可。

列表具有很多实用的操作方法,如添加元素、删除元素、修改元素等。例如:

代码语言:javascript代码运行次数:0运行复制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运行复制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运行复制my_tuple = (1, 2, 3, 4, 5)

# 切片

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

#指定索引

print(my_tuple[2]) # 输出:32.2 字符串(str)

在Python中,字符串是不可变对象之一。字符串是由字符组成的序列,用于表示文本信息。创建字符串非常简单,只需使用单引号'或双引号"将字符括起来即可。

虽然字符串本身是不可变的,但我们可以通过切片(slicing)来获取字符串的子串,这实际上是创建了一个新的字符串对象。例如:

代码语言:javascript代码运行次数:0运行复制my_str = 'Hello, world!'

print(id(my_str))

sub_str = my_str[0:5] # 获取前5个字符

print(sub_str) # 输出:Hello需要注意的是,当我们对字符串进行切片操作时,会创建一个新的字符串对象,而不会修改原始字符串。这是因为字符串在Python中是不可变的,任何对字符串的操作都会生成一个新的字符串对象。

除了切片操作外,我们还可以使用字符串的一些常用方法来处理字符串,如拼接、替换、分割等。这些方法都不会修改原始字符串,而是返回一个新的字符串对象。例如:

代码语言:javascript代码运行次数:0运行复制# 字符串拼接

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-immutablehttps://docs.python.org/3/glossary.html#term-mutable

相关阅读:

Python 如何克隆一个列表,使它不会在赋值后发生意外变化?

如何在迭代时从 python 列表中删除元素?Python 数据结构之 dictionaryPython 数据结构之 tuple理解Python的浅拷贝和深拷贝

猜你喜欢

治疗失忆药有哪些
365彩票所有官方app下载平台

治疗失忆药有哪些

07-29 7644
uc浏览器下载app不能安装怎么解决
365bet体育在线中文网

uc浏览器下载app不能安装怎么解决

09-12 9874
国际足联世界杯(FIFA World Cup)简称“世界杯”微信图文消息模板
热血传奇各区人口排名
bt365手机官方网址

热血传奇各区人口排名

07-14 2170
国足利好消息来了!2030年世界杯有望扩军至64队。
365彩票所有官方app下载平台

国足利好消息来了!2030年世界杯有望扩军至64队。

08-04 1771
天价片酬:一个亿买鹿晗60天?果然是“贵”圈!
365彩票所有官方app下载平台

天价片酬:一个亿买鹿晗60天?果然是“贵”圈!

07-11 2399