2015-01-16 87 views
0

我在一個函數中有一個全局變量,用作另一個函數的參數。如何在不改變第二個函數的情況下將它用作參數?python全局變量作爲參數

例子:

variable = [] 

def bar(x): 
    x[2] = 4 
    print x 

def foo(): 
    global variable 
    variable = [1, 2, 3, 4] 
    bar(variable) 
    print variable 

運行foo()這樣將輸出:

[1, 2, 4, 4] 
[1, 2, 4, 4] 

當我希望它打印:

[1, 2, 4, 4] 
[1, 2, 3, 4] 

那麼,有沒有一種方法來保持原有的全局變量供將來使用,同時仍然在其他函數中使用它?

+0

傳遞它的一個副本? –

+0

可能的重複[如何在Python中複製或複製列表?](http://stackoverflow.com/questions/2612802/how-to-clone-or-copy-a-list-in-python) – user3467349

回答

2

如果您希望列表中的內容傳遞給bar,但您不希望更改影響原始列表,請在傳遞列表時複製該列表。只需更改以下內容即可:

bar(variable) 

到:

bar(variable[:]) 

[]符號可以被用來創建列表,它們是索引的特定範圍的拷貝片。
[:]明確給你一個整個列表的副本。

+0

Idk why這是downvoted,但這是正確的答案,也許你應該提到變量[:]切片清單,以製作完整列表的副本。 – user3467349

+0

@ user3467349我也不知道。感謝您的建議。 – khelwood

1

如果你想傳遞一個列表的副本,只需使用bar(variable[:])。 像這樣:

variable = [] 

def bar(x): 
    x[2] = 4 
    print x 

def foo(): 
    global variable 
    variable = [1, 2, 3, 4] 
    bar(variable[:]) 
    print variable 

這將輸出:

>>> foo() 
[1, 2, 4, 4] 
[1, 2, 3, 4]