python中,tuple中嵌入了乙個list,list的內容變了,tuple會變嗎?

時間 2021-05-05 14:48:04

1樓:「已登出」

我的理解是這樣的。tup=("a",list1)。tuple的第二個元素指向的是list1的記憶體位址,元素指向的記憶體位址是不會發生變化的,所以無論怎麼修改list1,tuple都不會變化。

2樓:三盞燈亮一盞

就像你有三個兒子,其中乙個兒子有兩個兒子,後面這個兒子又生了乙個兒子,雖然他變成三個兒子了,但你還是只有三個兒子,並沒有因為他多生了乙個兒子,你有三個兒子的事實就變了。

3樓:冒泡

tuple的內容是指它的所有元素的「引用」,而不包括這些元素引用的物件的內容

tuple的不變是指它的元素一旦確定就不能再改變(引用其他物件),跟它原本引用的物件的內容改變無任何關係

4樓:忘荃

tuple從習慣上來講,只會內含不可變物件作為元素,像是整數,或者字串啥的。因為tuple就是用來將不可變元素組織起來構成新的不可變物件的。所以tuple常常被嵌入dict或者list,大部分人都是這麼巢狀的,沒人會去反著巢狀。

不要違背python的原則去學python,這些原則常常是良好的程式設計習慣的體現。

python在設計的時候,已經預設了使用者有良好的程式設計習慣,所以很多時候不會禁止你去做一些不合理的事情。但是,這些事情請不要做。

最後就是不要跟著這種老笨比老師的課程學習了,重新找個靠譜點的課程吧。其他答主很多也提到了,大家意見是一致的~

5樓:老王

題主貼出來的圖都是正常行為,貼圖中兩部分行為不一致時因為第一部分中,一共引入了兩個list,tuple初始化完成後就一直包含的是第乙個list物件,後面修改的是第二個list物件。

把問題再簡化一下:

In [1]: l = [1]

In [2]: t = (l)

In [3]: t

Out[3]: [1]

In [4]: l = [2] # l指向新的list物件[2]

In [5]: t

Out[5]: [1元組t中仍然是老的list物件[1]In [6]: t = (l) # 元組重新賦值In [7]: t

Out[7]: [2]

6樓:P1g詞不達意

首先,這不是你發現的 bug ,也不是什麼你沒發現的規律。

是你對 python 中引用的概念以及可變資料型別和不可變資料型別這一基礎概念的沒掌握

l1 = [1,2]

t1 = (2,l1)

這個時候 tuple 的第二個元素指向的是 l1 指向的記憶體位址,所以指向的是 [1,2] 這時候修改 l1 的指向並不能修改 t1 中的元素, 如果你對 l1 指向的 list 物件進行修改的話,比如:

這個時候 t1 = (2,[1,2,3])tuple 中的元素無法修改指的是元素指向的記憶體位址不能變化元素的位址始終指向同乙個 list 物件的話不論 list 中的元素如何變化,對於 tuple 來說他都是沒變化的

python 中關於serve forever函式

文刀天可 我的理解是serve socketserver使用多執行緒的話,應該是要使用 ThreadingTCPServer這個類,這個類繼承了ThreadingMixIn類和TCPServer類,其中ThreadingMixIn類才是處理執行緒的,而serve forever是通過TCPServe...

Python中除了matplotlib外還有哪些資料視覺化的庫?

野客 說幾種 matplotlib 之外相對比較常見的 Python 視覺化庫吧。1.pyecharts pyecharts 是將 Python 與 ECharts 結合的視覺化庫,用於通過 Python 生成 Echarts 圖表。繪製玫瑰圖等常見疫情圖 超詳細 pyecharts1.x 教程 2...

在Python中,parameters與argument有什麼不同?

levi a parameter is a variable which we use in the function definition that is a handle that allows the code in the function to access the arguments f...