這是一個奇怪的。除非我在做一些愚蠢的事情。我有以下代碼:一個變量是另一個變量也在改變原來的
gps_markers = [ ['Example text', 34.4563,-118.1241], [34.5235,-118.1245], [34.6432,-118.1554] ]
new_gps = gps_markers
def make_points(coords):
if(coords):
# Firstly we don't want the hover text.
for x in range(0, len(coords)):
if(len(coords[x]) == 3):
coords[x].pop(0)
new_list = [{'lat': d[0], 'lng': d[1]} for d in coords]
# Return the new list after the list comprehension.
return new_list
print '\nbefore newgps ->', gps_markers
new_gps = make_points(new_gps)
print '\nafter newgps ->', gps_markers
然後運行腳本,我從打印行獲得以下輸出。
before newgps -> [['Example text', 34.4563, -118.1241], [34.5235, -118.1245], [34.6432, -118.1554]]
after newgps -> [[34.4563, -118.1241], [34.5235, -118.1245], [34.6432, -118.1554]]
現在爲什麼它對我沒有意義。第一個變量gps_markers
不應該在這個腳本的任何位置生效,對吧?我製作gps_markers
的副本new_gps
。然後通過我的make_points
方法運行new_gps
。這將影響該變量。但它也影響gps_markers
?不知道是否我只是一直盯着這個太長時間,或者是否有我失蹤的東西。感覺就像兩個一樣。
參見[這裏](http://stackoverflow.com/questions/17707742/changing-a-value-in-one-list-changes-the-values-in-another-list-with-a-different ) – roganjosh
在第二行中應該是'new_gps = gps_markers [:]'。這將創建第一個列表的副本。 – Nf4r
'a = b'不會生成b的新副本。 a和b是SAME對象的不同名稱。 –