python中的不可变数据类型与可变数据类型详解

  • Post category:Python

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中的不可变数据类型和可变数据类型都有自己的特点。不可变数据类型在内存中只有一个,修改操作会创建新的对象;可变数据类型在内存中是可以被修改的。在实际编程中需要根据具体情况选择合适的数据类型。