Python的參數(shù)傳遞是賦值傳遞(passbyassignment),或者叫作對象的引用傳遞(passbyobjectreference)。在進(jìn)行參數(shù)傳遞時,新變量與原變量指向相同的對象。下面先來看一下Python中可變和不可變數(shù)據(jù)類型賦值的例子。
1.不可變數(shù)據(jù)類型
整型(int)賦值:
a=1
print(id(a))
b=a
print(id(b))
a=a+1
print(id(a))
c=1
print(id(c))
執(zhí)行結(jié)果:
140722100085136
140722100085136
140722100085168
140722100085136
其中id()函數(shù)用于返回對象的內(nèi)存地址。
可以看到b,c都指向了相同的對象,而a=a+1并不是讓a的值增加1,而是重新創(chuàng)建并指向了新的值為2的對象。最終結(jié)果就是a指向了2這個新的對象,b指向1,值不變。
2.可變數(shù)據(jù)類型
以列表(list)為例:
l1=[1,2,3]
print(id(l1))#
l2=l1
print(id(l2))
l1.append(4)
print(id(l1))
print(l1)
print(l2)
執(zhí)行結(jié)果:
1933202772296
1933202772296
1933202772296
[1,2,3,4]
[1,2,3,4]
l1和l2指向相同的對象,由于列表是可變(mutable)數(shù)據(jù)類型,所以l1.append(4)不會創(chuàng)建新的列表,仍然指向相同的對象。由于l1和l2指向相同的對象,所以列表變化也會導(dǎo)致l2的值變化。
可變對象(列表,字典,集合等)的改變,會影響所有指向該對象的變量。對于不可變對象(字符串、整型、元組等),所有指向該對象的變量的值總是一樣的,也不會改變。
以上內(nèi)容為大家介紹了Python參數(shù)傳遞,希望對大家有所幫助,如果想要了解更多Python相關(guān)知識,請關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。http://m.2667701.com/