63169


以下のコードで実行したところ、local_testの実行前後でglobal_listの要素が変化してしまいました。  
local_testの実行前後でglobal_listの要素を変更しない方法はありますでしょうか？  
有る場合、どのようにコードを修正すればよいでしょうか？

環境：Python3.4.3

[code]

    global_list = [
      1,
      2,
      3,
      4
    ]
    
    def local_test():
      list = global_list
      list.append(5)
      print(list)
    
    print(global_list)  # [1,2,3,4]
    local_test()  # [1,2,3,4,5]
    print(global_list)  # [1,2,3,4,5]
    # 期待する出力
    print(global_list)  # [1,2,3,4]
    
[/code]


CC BY-SA 4.0
2020-02-19T02:44:40.637
63166
2020-02-19T03:41:12.650
37880
question
python python3
Python 3.4においてGlobalなListもしくはDict オブジェクトを定義する方法について


自分だったら、こうするかなと思います。

[code]

    global_list = [
      1,
      2,
      3,
      4
    ]
    
    def local_test():
      local_list = global_list + [5]
      print(local_list)
    
    print(global_list)  # [1,2,3,4]
    local_test()  # [1,2,3,4,5]
    print(global_list)  # [1,2,3,4]
    
[/code]

list の足し算は、元となった list の中身を変更することなく、結果は新しい list が得られるからです。


CC BY-SA 4.0
2020-02-19T03:11:43.150
63167
2020-02-19T03:11:43.150
754
63166
answer


既に回答がありますが、`global_list` そのものではなく、そのリストのコピーを利用するのが回避策です。  
リストにはコピーメソッドがあるので、

[code]

    - list = global_list
    + list = global_list.copy()
    
[/code]

とするだけで目的の結果が得られます。


CC BY-SA 4.0
2020-02-19T03:41:12.650
63169
2020-02-19T03:41:12.650
27724
63166
answer