2017-12-21 19 views
-2

참조 할 때 객체의 새 복사본을 만들려면 클래스가 필요합니다. 예를 들어호출 할 때 내 Class '객체를 복사하는 방법 (예 : 반복 할 때)

:

obj1 = MyClass(1,2) 
obj2 = obj1 
obj2.1st_att = 5 

>>> print obj1 
(5,2) 

내가 obj2보다하는으로 obj1가 연결되지 않은 유지하려는

+1

개체를 참조 할 때마다 개체의 복사본을 자동으로 만드는 방법을 묻고 있습니까? 그것은 Float 또는 Int가 어떻게 작동하는지 전혀 아닙니다. –

+0

중복 사본 : [이 답변은 내 답변을 참조하십시오.] (https://stackoverflow.com/questions/47871806/how-do-i-change-a-variable-inside-a-variable/47872098 # 47872098) – IMCoins

+0

@ScottHunter 그럼 어떻게 작동합니까? 기본적으로 객체가 변경되지 않기를 원하므로 새로운 객체에 대한 변경 사항을 반복하거나 참조 할 때 원본과 연결되지 않습니다. – Rocobop

답변

1

당신이해야이 같은 경우에 copy 객체입니다.

from copy import copy 
obj1 = MyClass(1,2) 
obj2 = copy(obj1) 
obj2.1st_att = 5 

클래스가 복잡하고 많은 참조가있는 경우에는 deepcopy를 사용하십시오.

+0

사본을 사용하지 않으려 고하지만 정확한 행동을 자동으로하고 싶습니다. 내 수업 – Rocobop

+1

@Rocobop 나는이 해결책이 당신이 찾고있는 것이라고 믿습니다. – IMCoins

+0

링크가 있다고 생각하십니까? – Rocobop

0

파이썬은 다른 변수에 할당 할 때마다 int 나 float의 사본을 만들지 않습니다. 것은 그들이 변경할 수 없다는 것입니다; int에는 변경할 수있는 것이 없으므로 많은 변수를 할당해도 아무런 놀라움을 얻지 못할 것입니다.

obj2.1st_att = 5을 사용하면 개체의 특성을 명시 적으로 수정하고 있습니다. int의 아날로그 작업은 없습니다. 이 조작에 의해 오브젝트가 변경되어,이 변경이 그 오브젝트에의 참조를 보관 유지하고있는 다른 누구에게나 표시 될 것이 예상됩니다.

어떤 식 으로든 문제를 해결하려고해서는 안됩니다. 예상치 못한 많은 버그가 발생하거나 놀라운 동작을 유발할 수 있습니다. 객체의 복사본을 만드는 것은 명시 적으로 취해야 할 행동입니다. 그것에 익숙해.

+0

나는 알고있다. .. 당신은 나를 틀리게하고있다 - 나는 나의 학급의 모든 인스턴스를 사본으로 원한다. 또는 본질적으로 클래스 클래스의 객체를 – Rocobop

+0

으로 변경하고 싶지만 속성에 대한 변경을 차단하는 방법에 대한 답변 만 있었고 문제가 해결되지 않았습니다. – Rocobop

+0

음,'obj2.1st_att = 5'에 할당하고 싶습니까? 객체가 지원해야하는 작업입니까? 아니면 누군가가 객체에 어떤 것을 할당하려 할 때 오류가 발생하기를 원하나요? 이는 자동으로 복사본을 만드는 것과는 다른 논의입니다. – deceze