2016-06-30 10 views
0

誰かが「Cvalue」を「fred」に追加するのを防ぐ方法を教えてもらえますか?
私はpython 2.7を使用していますが、python 3は同じ動作をします。Python dictに追加すると別の変数に影響があります


#!/usr/bin/env python 

hdict = {52951331: [5], 23396132: [4], 82982473: [19, 37], 126988879: [20] } 
Cdict = {23396132: [19, 37], 82982473: [4], 126988879: [5], 52951331: [20]} 

result = {} 
for key, value in hdict.iteritems(): 
    if key in Cdict: 
     result[key] = value 
     for Cvalue in Cdict[key]: 
      fred = value 
      print 'fred1: ', fred 
      result[key].append(Cvalue) 
      print 'fred2: ', fred 
+0

'fred = value'は' value'のコピーを作成しません。 'result [key] = value'と同じです。 「Pythonの名前と値についての事実と神話」(http://nedbatchelder.com/text/names.html)を参照してください。 – user2357112

+0

これはdictsについてではなく、リストについてです。ディクテーションは物事を難読化するだけです。 'some_value'と同じ問題があります。 – Evert

答えて

0

なぜコピーを使用しないでください。

#!/usr/bin/env python 

import copy 

hdict = {52951331: [5], 23396132: [4], 82982473: [19, 37], 126988879: [20]} 

Cdict = {23396132: [19, 37], 82982473: [4], 126988879: [5], 52951331: [20]} 
result = {} 

for key, value in hdict.iteritems(): 

if key in Cdict: 

    result[key] = value 
    for Cvalue in Cdict[key]: 
     fred = copy.copy(value) 
     print 'fred1: ', fred 
     value.append(Cvalue) 
     print 'fred2: %s, value: %s' % (fred, value) 
+0

'value'は' list'なので、 'fred = value [:]'はおそらく十分単純です。 – Evert

関連する問題