Python:值传递,引用传递?不存在的,是赋值传递
Python的變量及其賦值
c/c++/c#/java 里面都有值傳遞,引用傳遞的概念,在Python中是如何的?
例
此時,變量a與變量b指向同一對象
變量的賦值,只是表示讓變量指向了某個對象,并不表示拷貝對象給變量;而一個對象,可以被多個變量所指向。
接著
由于整型變量(int),字符串(string)都是不可類型,a = a + 1 會創建一個值為2的新對象,并用a指向它。
因此,b指向的還是1這個對象。 【對于不可變對象(字符串,整型,元祖等等),所有指向該對象的變量的值總是一樣的,也不會改變。但是通過某些操作(+= 等等)更新不可變對象的值時,會返回一個新的對象。】
列表的例子
可變對象(列表,字典,集合等等)的改變,會影響所有指向該對象的變量。
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助, 群里還有不錯的視頻學習教程和PDF電子書! ''' l1 = [1, 2, 3] l2 = l1 l1.append(4) print(l1) #[1, 2, 3, 4] print(l2) #[1, 2, 3, 4]由于l1是可變類型,因此l1.append(4)不會創建新對象,會在原列表中插入4,而l1與l2都是指向這個列表,所以值都為[1,2,3,4]
變量可以刪除,但對象無法被刪除。
l = [1, 2, 3] del l #l被刪除,對象[1,2,3]仍然存在Python 函數的參數傳遞
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:857662006 尋找有志同道合的小伙伴, 互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' def my_func1(b):b = 2a = 1 my_func1(a) print(a) #1這里參數傳遞后 b與a 同時指向 值為1這個對象,接著b=2,系統建立2這個對象,并把b指向2,因此a還是指向值為1的對象
l2與l1都指向[1,2,3]這個列表對象,列表是可變類型,列表對象的值修改后并不會重新創建一個新對象,指向這個對象的l1的值也相應變為[1,2,3,4]
def my_func4(l2):l2 = l2 + [4]l1 = [1, 2, 3] my_func4(l1) print(l1)#[1, 2, 3]l2=l2+[4] 會創建一個新的列表對象[1,2,3,4]并把l2指向這個新對象,因此l1不會受影響
5)如果想把l1也指向新對象,則可以用return
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:857662006 尋找有志同道合的小伙伴, 互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' def my_func5(l2):l2 = l2 + [4]return l2l1 = [1, 2, 3] l1 = my_func5(l1) print(l1) #[1, 2, 3, 4]第3)與第5的作用是一樣的,但實際中一般會使用return語句,語義會更加清晰
總結
Python中參數的傳遞既不是值傳遞,也不是引用傳遞,而是賦值傳遞,或者是叫對象的引用傳遞,指向一個具體的對象
- 如果對象是可變的,當其改變時,所有指向這個對象的變量都會改變。
- 如果對象不可變,簡單的賦值只能改變其中一個變量的值,其余變量則不受影響。
總結
以上是生活随笔為你收集整理的Python:值传递,引用传递?不存在的,是赋值传递的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python进阶: Decorator
- 下一篇: Python进阶:对象复制与比较,分深浅