不可变对象(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



