本节我们接着讲可变数据类型和不可变数据类型:
这个系列教程建议对照着视频学习,以下仅为课件内容。
本节课程的视频和实例源码下载方式:点击->我的主页,查看个人简介。
我尽量坚持每日更新一节。
前面我们的学习中其实已经涉及到可变数据类型和不可变数据类型的概念了,这一节我们总结一下。
python的数据类型分为mutable(可变) 和 immutable (不可变):
- mutable包括list、dictionary、set
- immutable包括 number、string、bytes、tuple、frozenset
这里的可变与不可变,指的是该对象对应内存中的那块数据(value)是否允许改变。
如果是不可变类型数据,系统会重新分配一个对象,并将该对象的引用(可以理解为内存地址\指针)重新赋给变量。而可变类型则可以直接修改,不会生成新的对象。
在函数传参时,两者也存在差别。如果入参是不可变类型,那么是传值方式,如果入参是可变类型,那么传入的是对象的引用。这里我们要使用到函数的概念,因为还没有讲函数,所以大家先通过下面的一个实例记住这个知识点,后面学习函数的时候我们会再次提及。
# author: Tiger, wx ID:tiger-python
# file: ./5/5_16.py
# 可变数据类型和不可变数据类型
# 函数入参区别
def incr_num(x):
x = x + 1
def pop_list(list_1=[]):
list_1.pop()
test_x = 100
test_list = [100, 200, 300]
incr_num(test_x) # 不可变类型,传的是值
pop_list(test_list) # 可变类型,传的是引用(地址)
print(test_x)
print(test_list)
# 不可变类型,需要return一个新的对象
def incr_num_2(x):
y = x + 1
return y
test_y = incr_num_2(test_x)
print(test_y)
通过上面实例可以看出,对于函数入参是可变类型的情况,它传递的是变量的值-值传递,函数里面处理的变量已经是指向了一个新的对象空间,所以在函数里面对它进行改变不会影响函数外面的变量。值传递的方式,需要return来返回结果。
而对于函数入参是不可变类型的情况,它传递的是变量指向对象空间的地址。函数里面对这个地址进行操作,同样会影响外部的变量。这种方式,不需要return结果。
本节课程的视频和实例源码下载方式:点击->我的主页,查看个人简介。
我尽量坚持每日更新一节。