Python 值类型和引用类型有什么区别?

1. 值类型和引用类型的概念

在Python中,所有的数据都可以被分为值类型和引用类型。

值类型是指数据在内存中直接存储其值的类型,比如数字、字符串、布尔值等。当我们给一个值类型的变量赋值给另一个变量时,实际上是将当前变量的值复制一份给新的变量。

a = 10

b = a

a = 20

print(a) # 输出 20

print(b) # 输出 10

引用类型是指数据在内存中存储地址的类型,比如列表、字典、对象等。当我们给一个引用类型的变量赋值给另一个变量时,实际上是将当前变量的引用复制一份给新的变量。

alist = [1, 2, 3]

blist = alist

alist.append(4)

print(alist) # 输出 [1, 2, 3, 4]

print(blist) # 输出 [1, 2, 3, 4]

2. 值类型和引用类型的区别

2.1 赋值行为

从上面的例子中可以看出,值类型的赋值实际上是创建了一个新的变量并复制值,而引用类型的赋值只是创建了一个新的引用,并没有复制实际的数据。

2.2 修改行为

当我们修改一个值类型的变量时,不会影响到其他变量。

a = 10

b = a

a = 20

print(a) # 输出 20

print(b) # 输出 10

当我们修改一个引用类型的变量时,会影响到所有引用该数据的变量。

alist = [1, 2, 3]

blist = alist

alist.append(4)

print(alist) # 输出 [1, 2, 3, 4]

print(blist) # 输出 [1, 2, 3, 4]

通过这个例子可以看出,修改alist的同时也修改了blist,因为它们引用的是同一个列表。

2.3 函数传参

在Python中,函数的参数传递也会受到值类型和引用类型的影响。

当我们将一个值类型的变量作为参数传递给函数时,函数内部修改该参数的值不会影响到外部的变量。

def modify_value(num):

num = 20

a = 10

modify_value(a)

print(a) # 输出 10

当我们将一个引用类型的变量作为参数传递给函数时,函数内部修改该参数的值会影响到外部的变量。

def modify_list(lst):

lst.append(4)

alist = [1, 2, 3]

modify_list(alist)

print(alist) # 输出 [1, 2, 3, 4]

可以看到,modify_list函数内部的修改影响了外部的alist列表。

3. 总结

值类型和引用类型的区别在于赋值行为、修改行为和函数传参时的表现。

值类型的赋值是复制当前变量的值,修改一个变量不会影响到其他变量。引用类型的赋值是复制当前变量的引用,修改一个变量会影响到其他引用该数据的变量。

在函数传参时,值类型的参数不会受到函数内部修改的影响,但引用类型的参数会受到函数内部修改的影响。

后端开发标签