Python是一门非常强大的编程语言,具有很多独特的特性。其中一个特性就是Python中有可变对象和不可变对象的概念。对于初学者来说,可能不太理解这个概念,本篇文章旨在从不同的角度对Python可变对象和不可变对象进行详细阐述。
一、Python对象
在Python中,一切皆为对象。任何一个值都可以看作是一个对象。数值、字符串、列表、元组等常见的数据类型都是对象。
# 例子1 a = 1 b = "hello" c = [1, 2, 3] d = (1, 2, 3)
在上面的例子中,a、b、c、d都是Python对象。
二、可变对象和不可变对象
1. 不可变对象
不可变对象是指一旦创建就不能修改其值的对象。比较常见的不可变对象有数字、字符串、元组等。
# 例子2 a = 10 b = "hello world" c = (1, 2, 3)
在上面的例子中,a、b、c都是不可变对象。
2. 可变对象
可变对象是指其值可以被修改的对象。比较常见的可变对象有列表、字典等。
# 例子3 a = [1, 2, 3] b = {"name": "Tom", "age": 18}
在上面的例子中,a、b都是可变对象。
三、Python对象的赋值和传递方式
1. 赋值
当我们将一个对象赋给一个变量时,变量名就成为了一个指向该对象的引用。如果赋值的是不可变对象,那么该变量仅仅是将该对象的值复制给该变量,而不是指向该对象本身。如果赋值的是可变对象,那么该变量就会指向该对象本身。
# 例子4 a = 10 b = a
在上面的例子中,b是指向a所指向的对象10的引用。
# 例子5 a = [1, 2, 3] b = a b[0] = 4 print(a) #[4, 2, 3] print(b) #[4, 2, 3]
在上面的例子中,a和b都指向同一个列表对象,因此修改b的同时,a也会发生改变。
2. 传递方式
Python中的参数传递都是按引用传递,这个引用就是指向一个对象的指针。
当参数是不可变对象时,相当于传递的是该对象的值。函数内部对参数的修改不会影响到函数外部传递的变量。
# 例子6 def func(a): a += 1 print(a) b = 1 func(b) #2 print(b) #1
当参数是可变对象时,函数内部对参数的修改会影响到函数外部传递的变量。
# 例子7 def func(a): a.append(4) print(a) b = [1, 2, 3] func(b) #[1, 2, 3, 4] print(b) #[1, 2, 3, 4]
在上面的例子中,虽然b在函数内部被修改了,但是函数外部的b也发生了改变。
四、总结
Python中有可变对象和不可变对象的概念。不可变对象一旦创建就不能修改其值,比较常见的是数字、字符串、元组等。可变对象的值可以被修改,比较常见的是列表、字典等。Python中的参数传递都是按引用传递,当参数是不可变对象时,相当于传递的是该对象的值;当参数是可变对象时,函数内部对参数的修改会影响到函数外部传递的变量。