理解Python中的可变类型和不变类型


理解Python中的可变类型和不变类型


可变类型和不变类型

常见的不可变类型:

  1. 数字:int(),float(),complex()
  2. 不可变的序列:str(),tuple(),frozenset(),bytes()

常见的可变类型(几乎所有其他):

  1. 可变序列:list(),bytearray()
  2. 套装类型: set()
  3. 映射类型: dict()
  4. 类,类实例
  5. 等等

快速测试类型是否可变的一个技巧是使用id()内置函数。

示例,使用整数,

>>> i = 1
>>> id(i)
***704
>>> i += 1
>>> i
2
>>> id(i)
***736 (different from ***704)

使用列表,

>>> a = [1]
>>> id(a)
***416
>>> a.append(2)
>>> a
[1, 2]
>>> id(a)
***416 (same with the above id)

变量的值会发生变化,但会通过更改变量引用的内容来更改。可变类型可以改变这种方式,它也可以 “就地”改变。

这是区别。

实例

x = 'foo'
y = x
print x # foo
y += 'bar'
print x # foo

x = [1, 2, 3]
y = x
print x # [1, 2, 3]
y += [3, 2, 1]
print x # [1, 2, 3, 3, 2, 1]

def func(val):
    val += 'bar'

x = 'foo'
print x # foo
func(x)
print x # foo

def func(val):
    val += [3, 2, 1]

x = [1, 2, 3]
print x # [1, 2, 3]
func(x)
print x # [1, 2, 3, 3, 2, 1]