変数 b が指すリストを代入した変数 a の順序を変更すると、変数 b のリストまで変更されてしまう


`b`をランダムにしないよう、わざわざ`a=b`をしているのに、なぜか`i`がランダムに表されます。

[code]

    b = [1,2,3,4,5,6,7]
    a = b
    for i in b:
        random.shuffle(a)
        c = a
        print(i)
    #1,4,5,2,7,3,6
    
[/code]

当たり前ですがrandomをコメント化すると順通り表示されます。

[code]

    b = [1,2,3,4,5,6,7]
    a = b
    for i in b:
        # random.shuffle(a)
        c = a
        print(i)
    #1,2,3,4,5,6,7
    
[/code]

for分の`b`すなわち`i`を妨害しないためには、どうすればよいでしょうか。  
python 3.5.2です。




リストのコピーは

[code]

    a = b[:]
    
[/code]

とするのが一般的なイディオムです。

[code]

    a = list(b)
    
[/code]

とする方法もあります。もちろんcopyでもできますが、intのコピーなら大鉈を振るうこともないかと。

追記：コメントに「本来bにはdictの二重配列が入るためその方法`a=b[:]`は使用できませんでした。」と重要な追加がありました。質問本文が編集されるまではこの回答は残しておきます。




リストのコピーは

[code]

    a = b[:]
    
[/code]

とするのが一般的なイディオムです。

[code]

    a = list(b)
    
[/code]

とする方法もあります。もちろんcopyでもできますが、intのコピーなら大鉈を振るうこともないかと。

追記：コメントに「本来bにはdictの二重配列が入るためその方法`a=b[:]`は使用できませんでした。」と重要な追加がありました。質問本文が編集されるまではこの回答は残しておきます。

