您好,登錄后才能下訂單哦!
本篇內容主要講解“python開發中兩個列表之間的傳值過程介紹”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“python開發中兩個列表之間的傳值過程介紹”吧!
賦值如下,可以看見,如果直接使用 = 的話。其中一個變換便會引起另外一個變換,這時因為這兩個list被python解釋的時候使用的相同的地址,如下面輸出的 id()中的內容,所以此時如果想讓一個列表接收到另外一個列表的值,并且在接收到值后不會因為其中任意一個值的改變而改變,這時候就需要使用copy方法,這里可以解釋成,當使用了copy方法后,python單獨創建了找個一個內存區的地址放了新的那個值。
a = [ 1,2,3] b = a a[0] = a[0] +1 print(a) print(b) print(id(a[0])) print(id(b[0])) print("*"*20) a1 = [5,6,7] b1 = a1.copy() a1[0] = a1[0] + 1 print(a1) print(b1) print(id(a1[0])) print(id(b1[0]))
輸出
[2, 2, 3] [2, 2, 3] 140729246982592 140729246982592 ******************** [6, 6, 7] [5, 6, 7] 140729246982720 140729246982688
這也是我今天被坑的地方,注意到了第一層,但卻沒有注意到第二層,如下可以看見,雖然我們使用了copy方法,但是內層[]則沒有
a = [[1,2,4],[3,5,8],[],[]] b = a.copy() print("打印數組地址:") print(id(a)) print(id(b)) print("*"*40) print("打印內層元素地址:") print(id(a[0])) print(id(b[0])) print(id(a[0][0])) print(id(b[0][0])) print("*"*40) a.append(4) a[1][0] = a[1][0] + 1 print(a) print(b) print(id(a[4]))
輸出
打印數組地址: 1938878979528 1938879043976 **************************************** 打印內層元素地址: 1938877731208 1938877731208 140729246982560 140729246982560 **************************************** [[1, 2, 4], [4, 5, 8], [], [], 4] [[1, 2, 4], [4, 5, 8], [], []] 140729246982656
所以賦值操作應該為:
import copy a = [[1,2,4],[3,5,8],[],[]] # b = a.copy() b = copy.deepcopy(a)
即使用 copy.deepcopy 進行賦值操作,這時候當對a的內層元素進行操作之后,b不會跟著改變,
不過這里需要注意的是(不得不說這個設計節省內存真的很精妙),如果不更改a和b內部元素的值的話,那么a和b內部元素的值他們的地址還是相同的,只有在一方更改了自身地址內的值的時候,地址才會更改。
import copy a = [[1,2,4],[3,5,8],[],[]] # b = a.copy() b = copy.deepcopy(a) print("打印數組地址:") print(id(a)) print(id(b)) print("*"*40) print("打印內層元素地址:") print(id(a[0])) print(id(b[0])) print("0"*50) print(id(a[0][0])) print(id(b[0][0])) print("10"*50) print("\n") print(a[1][0]) print(b[1][0]) print(id(a[1][0])) print(id(b[1][0])) print("10"*50) print("\n") # print("*"*40) # a.append(4) a[1][0] = a[1][0] + 1 # # print(a) # print(b) # print(id(a[4])) # print("\n") print("10"*50) print(a[1][0]) print(b[1][0]) print(id(a[1][0])) print(id(b[1][0])) print("10"*50) print("\n") b[1][0] = b[1][0] + 2 print(id(b[1][0]))
輸出
打印數組地址: 1696261290248 1696261352200 **************************************** 打印內層元素地址: 1696257692040 1694368707272 00000000000000000000000000000000000000000000000000 140729133343136 140729133343136 1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010 3 3 140729133343200 140729133343200 1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010 1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010 4 3 140729133343232 140729133343200 1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010 140729133343264
到此,相信大家對“python開發中兩個列表之間的傳值過程介紹”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。