list和變量的指向問題
t?=?('a',?'b',?['A',?'B']) L?=?t[2] L[0]?=?'X' L[1]?=?'Y' print?t a=2 r=('a','b',a) print?r a=3 print?r
問題1:這兩段程序都是通過tuple,一個指向變量,一個指向list,為什么在list改變時tuple也隨之改變,解釋為指向未變,而在變量值改變時tuple不變?
問題2:a=3;這個過程不應該是在內存生成3,生成a,然后指向嗎?和list類似?
t?=?('a',?'b',?['A',?'B']) L?=?t[2] L[0]?=?'X' L[1]?=?'Y' print?t a=2 r=('a','b',a) print?r a=3 print?r
問題1:這兩段程序都是通過tuple,一個指向變量,一個指向list,為什么在list改變時tuple也隨之改變,解釋為指向未變,而在變量值改變時tuple不變?
問題2:a=3;這個過程不應該是在內存生成3,生成a,然后指向嗎?和list類似?
2016-09-24
舉報
2016-09-24
嗯,對于問題1,我覺得應該是L[2]指向的是列表,當列表的指向發生改變的時候,與tuple無關,所以列表中的元素可以改變。但r[2]指向的數字2.當變量a改變時,是又指向了數字3,相當于新生成了一個變量,與原來的變量已經無關了??蓞⒖?a >http://blog.csdn.net/longshenlmj/article/details/13773977
對于問題2,這個過程相當于新生成了變量,或者說是一個指向數字3的指針。對于指針的指向來說,可以說是類似的。
以上是我的一點理解,歡迎交流。
2022-03-25
哈哈,老師的習慣。。。是的,沒有問題,檢測嚴格而已
2016-09-24
問題1:tuple的元素是不可變的,指向的第三個元素是列表,元組指向列表的地址,修改的是列表的內容,列表的地址沒有變化,所以元組仍然是指向列表的
問題2 :a指向2的地址,r的元組中有a,元組連接到了這個地址,所以元組指向的是2的地址,后面給a賦值3 ,這時a指向了3的地址,但是元組仍然是指向原來的地址