Python中不可变数据类型与可变数据类型详解
在Python中,可以将数据类型分为两种:不可变数据类型和可变数据类型。不可变数据类型是指在创建后不能被修改或更新的数据类型,而可变数据类型是可以被修改或更新的数据类型。
不可变数据类型
Python中的不可变数据类型包括:
- 数字类型(int, float, complex)
- 字符串类型(str)
- 元组类型(tuple)
这些数据类型的值一旦创建就不能被修改或更新,任何修改操作都会创建一个新的值。
下面我们来看一个示例:
x = "hello"
print(id(x)) # 输出:140212038517520
x += " world"
print(id(x)) # 输出:140212019111344
在以上代码中,我们将“hello”字符串与“world”字符串相加得到了一个新的字符串“hello world”。因为字符串是不可变数据类型,所以实际上是在内存中创建了一个新的字符串对象,并将x指向了这个新的字符串对象。
再来看一个例子:
x = (1, 2, 3)
print(id(x)) # 输出:140212019620512
x += (4, )
print(id(x)) # 输出:140212019332000
在以上代码中,我们使用元组连接操作将(1, 2, 3)和(4,)连接,得到了一个新的元组(1, 2, 3, 4)。因为元组是不可变数据类型,所以实际上是在内存中创建了一个新的元组对象,并将x指向了这个新的元组对象。
可变数据类型
Python中的可变数据类型包括:
- 列表类型(list)
- 字典类型(dict)
- 集合类型(set)
与不可变数据类型不同,可变数据类型的值可以被修改或更新。下面我们来看一个示例:
x = [1, 2, 3]
print(id(x)) # 输出:140212019332296
x.append(4)
print(id(x)) # 输出:140212019332296
在以上代码中,我们使用列表的append方法在[1, 2, 3]列表末尾添加了一个元素4。因为列表是可变数据类型,所以在内存中原来的列表对象被修改了,但是x仍然指向这个被修改的列表对象。
再来看一个例子:
x = {"name": "Tom", "age": 18}
print(id(x)) # 输出:140212018627968
x["age"] = 20
print(id(x)) # 输出:140212018627968
在以上代码中,我们使用字典的索引操作将键“age”对应的值修改为20。因为字典是可变数据类型,所以在内存中原来的字典对象被修改了,但是x仍然指向这个被修改的字典对象。
总结
Python中的不可变数据类型和可变数据类型都有自己的特点。不可变数据类型在内存中只有一个,修改操作会创建新的对象;可变数据类型在内存中是可以被修改的。在实际编程中需要根据具体情况选择合适的数据类型。