① python比較兩組數組中元素是否完全相同的問題
是的。
你實現的重點就是要比較兩個列表的是否相同。
建議你可以先排序在比較
a.sort()
b.sort()
a==b就會返回True。
② python 值相同變數名不同,內存地址相同嗎
== (雙=), a == b —— 檢測兩個變數的字面值是否相同
id(a)/id(b) —— 讀取單個變數對象的內存存儲地址
is(操作符) a is b —— 檢測兩個變數存儲的對象的內存存儲地址是否相同
舉例:
1、整形數值的字面值為於0-255之間
①值相同: X=1,Y=1時 —— 用 X == Y 檢測這些整形數值的字面值是相同的,都是1,用 id(X) 、 id(y)(調用X或 調用Y),檢測也都是指向同一地址11,這個值只佔用一個內存地址,並且值相同的情況下,不管有多少個變數來調用這個值,都會指向這個同一值和這個值得內存地址,地址設為11,此時X=Y=1,共同讀取內存地址11。
②值不同 :變化為X=1,Y=2 時 ——值不同(1、2)所以變數會分別指向不同值和不同內存地址,此時:X=1仍舊讀取地址11,Y=2讀取地址22。
③值相同:變化拓展為X=2,Y=2,Y=Z時——則X=Y=Z=2 讀取地址為22。
以上三種情況,X、Y、Z都是變數,1和2是值,11和22是內存地址。①和③里不同變數指向同一值並且內存地址也相同的機制稱為:內存地址的共享引用。但是這種不同變數引用相同值得到相同內存地址的情況僅限於整形數值的字面值在0-255之間,和部分短位元組中。這是因為0-255之間的值的地址已被Python預緩存在內存中,而當整形數值的字面值大於255時,即便不同變數引用相同字面值,但內存的分配的地址也絕對不可能相同。舉例如下
2、整形數值的字面值大於255
④值相同:X=500,Y=500時 —— 用 X == Y 檢測他們的字面值是相同的500 但是用id(X)、 id(y)或 X is Y檢測他們的內存地址時,雖然字面值相同,但字面值500大於255,所以X與Y不共享內存地址,此時X內存地址為55,Y地址為66
⑤值不同 :變化為X=500,Y=600 時 —— 字面值不同且500、600都大於255,所以變數會分別指向不同內存地址,此時:X值=500已在④中聲明過,所以X地址仍為55,Y因改變值則重新新建地址為77。
⑥值相同:再變化為x=600,y=600,y=z時——則x=y=z=600
用x == y ==z 檢測他們字面值相同都是600 ,但因字面值600大於255,所以x與y與z不共享內存地址。用id(x)、 id(y)、 id(z)檢測他們的內存地址也都不相同。此時:Y值=600已在⑤中聲明過,所以此地址不變Y地址仍為77,X因改變值則重新建地址為88、z新建內存地址99。(並且由於Python的垃圾回收機制,每一個釋放過的對象地址都可以被再次進行使用。所以⑥里X的地址也可以是之前④里Y已釋放的的地址66,⑥里Z也可以使用X之前的內存地址55或Y之前使用的66)變數不存儲值,而是綁定到值。當一個對象沒有被綁定到任何一個變數時,它會在合適的時候被銷毀,所佔用的內存空間也會被回收。所以當一個新的對象被創建時,完全有可能分配到曾經回收的內存。簡單可理解為對象地址是:先聲明先佔有,釋放則回收。
③ 寫Python,如何設置點擊相同變數,全部高亮
在 工具 裡面下了個 word highlight settings 擴展就可以了