首页 > 编程知识 正文

Python中的可变和不可变

时间:2023-11-20 11:43:17 阅读:298064 作者:BGDD

Python是一种面向对象的编程语言,在Python中,数据类型可以分为可变(mutable)和不可变(immutable)两种类型。本文将从多个方面详细阐述Python中的可变和不可变,包括可变和不可变对象的定义、区别以及各自的使用场景。

一、可变和不可变对象的定义

1、可变对象:指的是在对象创建后,其内部的值可以被修改的对象。修改可变对象的值,不会改变该对象的内存地址。


a = [1, 2, 3]
a.append(4)
print(a)  # [1, 2, 3, 4]
print(id(a))  # 140197350469440

2、不可变对象:指的是在对象创建后,其内部的值无法被修改的对象。如果需要改变不可变对象的值,需要创建一个新的对象。


b = "Hello"
b = b + " World"
print(b)  # Hello World
print(id(b))  # 140197392902512

二、可变和不可变对象的区别

1、对于可变对象,修改对象的值不会改变内存地址。而对于不可变对象,改变对象的值会创建一个新的对象并返回内存地址。


c = [1, 2, 3]
print(id(c))  # 140197351627840
c.append(4)
print(c)  # [1, 2, 3, 4]
print(id(c))  # 140197351627840,内存地址不变

d = "Hello"
print(id(d))  # 140197391886160
d = d + " World"
print(d)  # Hello World
print(id(d))  # 140197350807568,创建新的对象,内存地址改变

2、可变对象是直接对内存地址进行修改的,所以对同一个可变对象的多个引用会共享同一个内存地址。而不可变对象的值无法被修改,所以每次修改都会创建一个新的对象,不同的引用指向不同的内存地址。


e = [1, 2, 3]
f = e
e.append(4)
print(f)  # [1, 2, 3, 4]

g = "Hello"
h = g
g = g + " World"
print(h)  # Hello

三、可变和不可变对象的使用场景

1、可变对象适合在需要频繁进行修改的情况下使用,因为修改可变对象的值不会创建新的对象,性能较高。


students = ["Alice", "Bob", "Charlie"]
# 遍历列表并修改每个元素的值
for i in range(len(students)):
    students[i] += " Smith"
print(students)  # ["Alice Smith", "Bob Smith", "Charlie Smith"]

2、不可变对象适合在需要保持对象值不变的情况下使用,比如用于字典的键值、元组等。由于不可变对象无法被修改,所以可以确保对象的值不会被意外修改。


person = {"name": "Alice", "age": 20}
# 将字典作为键值使用
data = {(1, 2): "value1", (3, 4): "value2"}
print(person["name"])  # Alice
print(data[(1, 2)])  # value1

四、总结

Python中的可变和不可变是指对象的内部值是否可以被修改。可变对象的值可以直接修改,不可变对象的值无法被修改,每次修改都会创建一个新的对象。可变对象适用于需要频繁修改值的情况,而不可变对象适用于需要保持值不变的情况。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。