這是我第一次在這裏發表,所以請原諒我,如果我不說清楚。我之前曾經搜索過這個問題,但並不確切知道用什麼術語來描述它。這段代碼原本是一個較大程序的一部分,但我嘗試刪除所有其他變量,但我的問題仍然存在:通過從舊名單複製創建新的列表
什麼我希望這樣做是創建一個函數,將數字列表分爲7個子列表。每個玩家列表中必須有一個子列表,這就是爲什麼我只是複製玩家列表並運行一個for循環來替換每個元素(以前是玩家的名字)和相應的七個數字。其中的集合數量應該從'player'列表中抽取,而這些數字本身是從'playermodifier'列表中抽取的,這兩個列表都是在程序中的其他地方定義的。
players=['Paul', 'Darren']
playermodifiers=[4,5,7,2,8,4,7,3,9,4,6,2,6,4]
def modifiersort():
n=1
global playermodifierssort
global playermodifiers
playermodifierssort=players
for x in playermodifierssort:
playermodifierssort[n-1]=playermodifiers[7*(n-1):7*n]
n=n+1
playermodifiers=playermodifierssort
,我想它,但是,它也以某種方式改變了原來的「玩家」名單是相同的playermodifierssort和playermodifiers在函數結束這對列表進行排序。當我運行該功能時,我得到:
playermodifiers = [[4, 5, 7, 2, 8, 4, 7], [3, 9, 4, 6, 2, 6, 4]]
players = [[4, 5, 7, 2, 8, 4, 7], [3, 9, 4, 6, 2, 6, 4]]
這是有問題的,因爲我想保留球員列表。這怎麼可能發生? 「玩家」名單不是全球性的,因此這個功能如何永久改變?
非常感謝。問題解決了,但我必須承認,即使沒有被標記爲全局性,我仍然對於「參與者」如何在功能之外進行改變仍然感到困惑。 – Paul
@Paul:你說得對,如果你在'modifiersort'函數中使用'players =「foo」',那麼全局'players'不會被改變。然而,你的'playermodifierssort = players'這一行創建了一個對'players'的引用 - 那個時候唯一存在的'players'是全局的。所以,一旦你創建了這個引用,改變'playermodifierssort'就會改變'player'。 –