2016-06-30 2 views
0

누군가가 아래 코드에서 "Cvalue"가 결과 [key]에 추가되기를 원할 때 "fred"에 추가되는 것을 막을 수 있습니까?
파이썬 2.7을 사용하고 있지만 파이썬 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'와 동일합니다. [ "파이썬 이름과 값에 관한 사실과 신화"] (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

관련 문제