可变类型和不可变类型的区别
- 可变类型:对象的值可以在原地被修改,修改后对象的内存地址不变。
- 不可变类型:对象一旦创建,其值就不能被修改。如果需要修改,会创建一个新的对象,内存地址也会改变。
例子
- 可变类型:
- 列表(List):例如
my_list = [1, 2, 3]
,可以使用 my_list.append(4)
等方法修改列表内容。
- 字典(Dictionary):例如
my_dict = {'a': 1}
,可以使用 my_dict['b'] = 2
来添加新的键值对。
- 不可变类型:
- 整数(Int):例如
num = 5
,如果执行 num = num + 1
,实际上是创建了一个新的整数对象 6
,num
指向了新的对象。
- 字符串(String):例如
s = 'hello'
,执行 s = s + ' world'
,会创建一个新的字符串对象 'hello world'
,s
指向新对象。
函数中参数修改的表现
- 可变类型参数:函数内部对可变类型参数的修改会影响到函数外部传入的对象。例如:
def modify_list(lst):
lst.append(4)
my_list = [1, 2, 3]
modify_list(my_list)
print(my_list) # 输出: [1, 2, 3, 4]
- 不可变类型参数:函数内部对不可变类型参数的修改不会影响到函数外部传入的对象。例如:
def modify_num(num):
num = num + 1
my_num = 5
modify_num(my_num)
print(my_num) # 输出: 5