可变、不可变类型

# 可变类型
a = [10, 20]
a[0] = 100

# 不可变类型
b = (10, 20)
b[0] = 100
  • 数据能够直接进行修改,就是可变类型,否则就是不可变类型。
  • 可变类型有: 列表、字典、集合
  • 不可变类型有: 数字、字符串、元组

引用

python 中,值是靠引用来传递来的。

a = 10
b = a
print(b)

a = 20
print(b)
a = [10, 20]
b = a
print(b)

a.append(30)
print(b)

可以用 id() 来判断两个变量是否为同一个值的引用

>>> a = 1
>>> b = a
>>> id(a) 
4376940304
>>> id(b)   # 注意两个变量的id值相同
4376940304
>>> a = 2
>>> id(a)   # 注意a的id值已经变了
4376940336
>>> id(b)   # b的id值依旧
4376940304
>>> a = [1, 2]
>>> b = a
>>> id(a)
4379304896
>>> id(b)
4379304896
>>> a.append(3)
>>> a
[1, 2, 3]
>>> id(a)
4379304896
>>> id(b)       # 注意a与b始终指向同一个地址
4379304896

函数中的引用

def test(b):
    b += b       # += 是直接对 b 指向的空间进行修改, 而不是让 b 指向一个新的
    # b = b + b  # 先把 =号 右边的结果计算出来, 然后让 b 指向新的地方


a = 100
test(a)
print(a)
def test(b):
    b += b
    # b = b + b


a = [10, 20]
test(a)
print(a)
def test(b):
    b += b
    # b = b + b
    print(id(b))

a = [10, 20]
test(a)
print(id(a))
  • Python 中函数参数是引用传递(注意不是值传递)
  • 对于不可变类型,因变量不能修改,所以运算不会影响到变量自身。
  • 而对于可变类型来说,函数体中的运算有可能会更改传入的参数变量。