Python中的可变对象与不可变对象;Python中的六大标准数据类型哪些属于可变对象,哪些属于不可变对象
Python中的可变对象与不可变对象
在Python中,数据类型分为可变对象和不可变对象,它们在内存中的表现方式有所不同,特别是在进行数据修改时,是否会影响对象的内存地址。本文将通过Python中的六大标准数据类型(数字、字符串、列表、元组、集合、字典)来分析哪些属于可变对象,哪些属于不可变对象。
一、Python的六大标准数据类型
Python中有六大标准数据类型:
- 数字 (Number):
int
,float
,bool
,complex
- 字符串 (String):
str
- 列表 (List):
list
- 元组 (Tuple):
tuple
- 集合 (Set):
set
- 字典 (Dictionary):
dict
1. 数字类型 (Number)
数字类型包括整数 int
、浮点数 float
、布尔值 bool
和复数 complex
。这些类型的对象是不可变的。
2. 字符串 (String)
字符串类型 (str
) 是不可变对象。这意味着字符串对象的内容一旦创建就不能改变。
3. 列表 (List)
列表类型 (list
) 是可变对象。对列表的任何修改都会直接影响到原始列表对象。
4. 元组 (Tuple)
元组类型 (tuple
) 是不可变对象。尽管元组本身是一个容器,它不能修改,但它可以包含可变类型的元素。
5. 集合 (Set)
集合类型 (set
) 是可变对象。你可以在原有集合中添加或删除元素。
6. 字典 (Dictionary)
字典类型 (dict
) 也是可变对象。你可以直接修改字典中的键值对。
二、可变对象与不可变对象的内存地址变化
1. 不可变对象的内存地址
不可变对象的内存地址在修改时会发生变化,每次修改都会创建新的对象,原始对象的内存地址保持不变。在实际应用中,尽量使用不可变对象。如tuple,是不可变对象,代码会安全。
2. 可变对象的内存地址
可变对象的内存地址不会改变,对对象内容的修改会直接影响原始对象。多个引用会指向同一个内存地址。
3. 示例代码
# 1. 数字类型(不可变)
a = 10
b = a
print("数字类型示例:")
print(f"初始值: a = {
a}, b = {
b}")
print(f"初始地址: id(a) = {
id(a)}, id(b) = {
id(b)}") # 初始时a和b地址相同
# 对不可变对象进行变更操作
a += 5 # 改变a的值
print(f"\n修改后的值: a = {
a}, b = {
b}")
print(f"修改后的地址: id(a) = {
id(a)}, id(b) = {
id(b)}") # a的地址发生变化,b的地址不变
# 2. 字符串类型(不可变)
s1 = "hello"
s2 = s1
print("\n字符串类型示例:")
print(f"初始值: s1 = {
s1}, s2 = {
s2}")
print(f"初始地址: id(s1) = {
id(s1)}, id(s2) = </