Python的数据类型
mutable(可变)
1、list – 列表
2、dict – 字典
3、set – 集合(不包含重复元素)
immutable(不可变)
1、int – 整型
2、float – 浮点型
3、str – 浮点型
4、tuple – 元组
作为函数参数的时候
可变数据类型:
函数传递的形式是地址传递,外部定义的变量作为实参被调用时,会跟随函数里面的操作进行改变。
例如:
def bubble_sort(arr):
n = len(arr)
for i in range(n-1):
for j in range(n-i-1):
if arr[j]>arr[j+1]:
arr[j],arr[j+1] = arr[j+1],arr[j]
if __name__ == "__main__":
arr = [5,6,20,14,23,98]
bubble_sort(arr)
print(arr) # 这里的输出,会是已经排好序的列表
1
2
3
4
5
6
7
8
9
10
11
如果我们不想要 外部定义的变量作为实参被调用时,会跟随函数里面的操作进行改变,只需要在函数开头,对形参进行一次copy(),即可。
def bubble_sort(arr):
# 只需要加这一行代码,即可
arr = arr.copy()
n = len(arr)
for i in range(n-1):
for j in range(n-i-1):
if arr[j]>arr[j+1]:
arr[j],arr[j+1] = arr[j+1],arr[j]
if __name__ == "__main__":
arr = [5,6,20,14,23,98]
bubble_sort(arr)
print(arr) # 这里的输出,依然是我们定义的列表,不会改变
1
2
3
4
5
6
7
8
9
10
11
12
13
不可变数据类型:
函数传递的形式是值传递,外部定义的变量作为实参被调用时,不会跟随函数里面的操作进行改变。
比如:
def func(a):
a = 5
print("func内:",a)
a = 2
func(a)
print("func外:",a) # 这里的a 还是等于 2
1
2
3
4
5
6
7
如果我们想要改变,只需要在函数里面,加一个return,即可
def func(a):
a = 5
print("func内:",a)
return a
a = 2
a = func(a)
print("func外:",a) # 这里的a 就变成了 5