2014-03-27 3 views
2

사전을 사용하기 전에 실제 변수의 값을 변경하고 싶습니다. 이 표준 DICT 전략 일 것입니다이름이 문자열에있는 파이썬 변수의 값 변경

:

>>> dict = {} 
>>> x = [1,2,3] 
>>> dict["x"] = x 
>>> x 
[1, 2, 3] 
>>> dict["x"] 
[1, 2, 3] 
>>> dict["x"] = [4,5,6] 
>>> dict["x"] 
[4, 5, 6] 
>>> x 
[1, 2, 3] 
>>> 

누구나가 알고 (I 반드시 목록을 사용하지 않는 것을 참고, 값은 복잡한 클래스 형 아니면 그냥 일반 INT 될 수 있습니다) x의 실제 내용이 변경되도록이 작업을 수행하는 방법은 무엇입니까? copy.deepcopy는 트릭도하지 않습니다. (에서와 같이 'DICT [ "X"] = copy.deepcopy (x)를')

+2

당신은 사전이 필요 없다고 확신하지 못했습니다. –

+0

왜 변수 이름에 액세스하고 싶습니까? [변수 이름에서 데이터를 지키십시오.] (http://nedbatchelder.com/blog/201112/keep_data_out_of_your_variable_names.html) –

+0

@LevLevitsky 할당 한 후에 x가 [4,5,6]을 포함하고 싶습니다. – Inbl

답변

4

사용 슬라이스 할당 : 다른 데이터 유형의

>>> d = {} 
>>> x = [1, 2, 3] 
>>> d['x'] = x 
>>> d['x'][:] = [4, 5, 6] 
>>> x 
[4, 5, 6] 
>>> d['x'] 
[4, 5, 6] 

은 당신이 그들을 할당하는 대신에 현재 위치를 수정할 확인 새로운 변수에. int, string 등과 같은 불변의 데이터 타입의 경우, 사용 가능한 적절한 연산은 없습니다.

+0

이것은 OP를 위해 작동하지 않을 것입니다 :'(필자는 반드시 목록을 사용하고있는 것은 아니며 값은 복잡한 클래스 유형이거나 보통의 int 일 수도 있음)'. –

+0

물론, 원칙 *은 동일합니다. 즉석에서 데이터를 수정하고 덮어 쓰지 마십시오. –

+2

@ThaneBrimhall : int를 수정하는 방법은 없습니다. –

2

이 끔찍한 아이디어와 끔찍한 코드 냄새의 악취이다가 ... ...이 끔찍한 생각이 합리적인 것으로 코드를 리팩토링이 당신 필요성을 해달라고하지만 당신은

mutables = { 
"x":x,"y":y,"Z":Z #make sure the dict key is exactly the same as var name 
} 

mutables['x'] = [5,6,7] 
for k,v in mutables.items(): 
    globals()[k] = v 
를 원하는 경우

원래 변수와 동일한 전역 범위에 있어야 함을 유의하십시오.

+0

그래, 상황이 좋지 않다는 것을 알고있다. 나는 코드 소유자가 그것을 변경할 수있는 권한이 없기 때문에 리팩토링 할 수 있기를 바란다. – Inbl