日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python引用传递产生的问题_理解Python中传递值和引用时出现问题

發布時間:2023/12/15 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python引用传递产生的问题_理解Python中传递值和引用时出现问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我可以看到三個基本的Python概念,它們可以為這個問題提供一些啟示:

1)首先,來自可變對象的賦值,如self.foo = arg1

就像復制指針(而不是所指向的值):self.foo和{}是相同的對象。這就是為什么接下來的路線

^{pr2}$

修飾arg1(即Person1)。因此變量是不同的“名稱”或“標簽”,它們可以指向唯一的對象(這里是person對象)。這解釋了baz(Person1)將Person1.age和bar1.foo.age修改為27,因為Person1和{}只是相同person對象(Person1 is bar1.foo返回{},在Python中)的兩個名稱。在

第二個重要的概念是作業。在def teh(arg1):

arg1 = [3,2,1]

變量arg1是本地的,因此代碼meh = [1,2,3]

teh(meh)

首先是arg1 = meh,這意味著arg1是列表meh的附加(本地)名稱;但是做arg1 = [3, 2, 1]就像說“我改變主意了:arg1從現在起將成為一個新的列表的名稱,[3,2,1]”。這里要記住的重要一點是,盡管賦值用“等號”表示,但它們是不對稱的:它們給右邊和右邊的(可變)對象一個額外的名稱,在左邊給出(這就是為什么你不能做[3, 2, 1] = arg1,因為左邊必須是一個或多個名稱)。因此,arg1 = meh; arg1 = [3, 2, 1]不能改變meh。在

3)最后一點與問題標題有關:“通過值傳遞”和“通過引用傳遞”不是Python中相關的概念。相關的概念是“可變對象”和“不可變對象”。列表是可變的,而數字是可變的,這就解釋了你所觀察到的。另外,你的Person1和bar1對象是可變的(這就是為什么你可以改變人的年齡)。您可以在atext tutorial和avideo tutorial中找到有關這些概念的更多信息。維基百科也有一些(more technical) information。一個例子說明了可變和不變行為之間的區別:x = (4, 2)

y = x # This is equivalent to copying the value (4, 2), because tuples are immutable

y += (1, 2, 3) # This does not change x, because tuples are immutable; this does y = (4, 2) + (1, 2, 3)

x = [4, 2]

y = x # This is equivalent to copying a pointer to the [4, 2] list

y += [1, 2, 3] # This also changes x, because x and y are different names for the same (mutable) object

最后一行是與y = y + [1, 2, 3]等價的not,因為這只會將一個新的list對象放入變量y,而不是同時更改y和{}所引用的列表。在

上面的三個概念(變量是[可變對象的名稱]、非對稱賦值和可變/不變性)解釋了Python的許多行為。在

總結

以上是生活随笔為你收集整理的python引用传递产生的问题_理解Python中传递值和引用时出现问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。