2017-12-27 27 views
0

在蟒 「結合」 的變量停止蟒,代碼如何從靜置列表

x = 0 
y = x 
y = 1 
print x 

返回 「0」,而代碼

x = [0] 
y = x 
y[0] = 1 
print x 

返回 「[1]」。 爲什麼python將列表與整數的處理方式如此不同,我能做些什麼來強制它將底部「x」視爲頂部「x」?似乎在各個第二行中的'='意味着不同的東西 - 頂部隻影響y,而底部以某種方式將x綁定到y。所以也許我需要在底部代碼中使用不同的符號?

+3

不,他們正在做同樣的事情。閱讀:https://nedbatchelder.com/text/names.html –

+2

這裏沒有涉及的字符串(除了'print'完成的轉換),你擁有的是* list *。像列表這樣的* mutable *對象上的'y = x'只是一個引用賦值,它們引用的對象是相同的。 – cdarke

+0

這是因爲'x'和'y'指的是同一個對象。 – srig

回答

1
a = [20, 21] 
b = [20, 21] 

print(a is b) # False 
print(a == b) # True 
print(id(a) != id(b)) # True 

ab具有相同的價值,但不指向同一個對象。

x = [1] 
y = x 

print(x is y) # True 
print(x == y) # True 
print(id(x) == id(y)) # True 

xy具有相同的值,並且是指相同的對象。

i = [0] 
j = i[:] # Copy of i 

print(i is j) # False 
print(i == j) # True 
print(id(i) != id(j)) # True 

ij具有相同的價值,但不指向同一個對象。