函数的参数传递
可变对象和不可变对象:
不可变对象(number,string,tuple):”引用传递“,该对象的值不能发生改变。
数据类举例:
def add(num): num=num+2 return num number1=10 number2=add(number1)#number1作为实参引用传递,该变量的值本身没有发生变化 print(number1) print(number2)
10 12
字符串类型举例:
def add(num): num=num+"world" return num string="hello" string2=add(string)#string作为实参引用传递,该变量的值本身没有发生变化 print(string)#函数调用后原字符串的值没有改变 print(string2)
hello helloworld
元组类型举例:
def add(num): num=num+(1,5,6) return num tuple1=(12,23,45) tuple2=add(tuple1)#tuple1作为实参引用传递,该变量的值本身没有发生变化 print(tuple1) print(tuple2)
(12, 23, 45) (12, 23, 45, 1, 5, 6)
可变对象(字典,列表,集合):“值传递”,该对象的值会发生变化。
列表为例:
def change(num): num.append(0) li = [] #定义一个空列表li print(li) change(li) #把li作为实参传递到函数体,传递过去变量值 print(li)#列表li的值已经发生变化
[] [0]
字典为例:
def dict_s(dict1): dict1["color"]="red" dict1={"名称":"太阳"} print(dict1) dict_s(dict1) print(dict1)
{'名称': '太阳'} {'名称': '太阳', 'color': 'red'}
集合为例:
def set(set1): set1.add("python") set1={"hello","world"} print(set1) set(set1) print(set1)
{'world', 'hello'} {'world', 'hello', 'python'}
查看变量内存地址:
为了提高内存利用效率,对于不大于256的整数,python会将具有相同值的整数对象给予相同的内存地址
举例:
a,b=10,20 print(id(a),id(b))#变量值相同,内存相同,即使变量名不相同 a=b=10 print(id(a),id(b)) c=50 print(id(c)) b=c print(id(b),id(c))
140731941263296 140731941263616 140731941263296 140731941263296 140731941264576 140731941264576 140731941264576