前言:
现时姐妹们对“python不可变数据对象”大约比较注重,朋友们都想要了解一些“python不可变数据对象”的相关内容。那么小编同时在网络上网罗了一些关于“python不可变数据对象””的相关知识,希望你们能喜欢,我们快快来学习一下吧!1.形参与实参
形参:顾名思义,就是形式上的参数,没有实际的意思,通过别人赋值后才有意义,相当于变量。在定义函数时,函数的参数列表中的变量就是形参。
实参:就是实际意义上的参数,是一个实际存在的参数,可以是字符串、数字等。在调用函数时,给函数传递的实际值就是实参。
2.形参与实参图解
3.值传递与引用传递
在Python中函数参数是引用传递(而不是值传递)。需要注意的是,对于不可变类型,比如说字符串,元组,数值和函数等,因为变量不能被修改,所以运算时不会影响到变量本身。而对于可变类型,比如说列表、字典、集合、自定义的对象等,函数体中的运算有可能会更改传入的参数变量。
1.对“可变对象”进行“操作”,直接作用于可变对象本身;
2.对“不可变对象”进行修改操作,会产生一个新的对象空间,并用新的值填充这块空间。
不可变对象
def add(x): # 这里的x是形参
print(f'我是形参时的x,地址是:{id(x)}')
x = x + 1 #这里的x与形参里的x不量同一个,是重新定义的(我们通过id来验证))
print(f'我是内部的x,地址是:{id(x)}')
print(x)
# 调用
x = 10
print(f'函数add的地址:{id(add)}') # add在Python也是一个对象,有对应的地址
print(f'我是调用add方法前定义的x,地址是:{id(x)}')
# 调用函数
add(x)
print(f'我是调用完add方法后的x,地址是:{id(x)}')
可变对象
对于可变类型,比如说列表,字典等,函数体中的运算有可能会更改传入的参数变量,因为传入的是地址,即对象的引用。在函数体中不创建新的对象的拷贝,而是直接修改所传递的对象。
mylist = [50,60]
def myappend(m):
print(f'list: {id(m)}') # mylist和m是指向同一个地址
m.append(100) # 由于m是可变的,不创建对象拷贝,直接修改
myappend(mylist)
print(f'mylist: {id(mylist)}')
print(mylist)
标签: #python不可变数据对象