저는 소프트웨어의 매개 변수 파일을 생성하는 데 사용되는 Python 클래스가 있습니다. 이 소프트웨어는 반복 프로세스에서 사용되며 각 반복마다 새로운 매개 변수 파일 집합이 필요합니다. 이와 같이 클래스 PropGen
은 각 반복 직전에 새 파일을 만들기 위해 호출됩니다.복사 방법에 관계없이 클래스 공유 객체 ID에 두 개의 OrdereDict가 포함되어 있습니다.
클래스는 전체 프로세스 전에 한 번 이러한 파일의 기본 매개 변수를 제공하고 현재 반복을 받으면 이러한 매개 변수를 수정하여 새 파일에 씁니다. 이 작업을 수행하는 방법은 OrderedDict
self.params
에 기본값을 저장하고 파일에 쓰는 데 사용되기 전에 수정 된 값을 수집하는 또 다른 OrderedDict
self.output_params
을 생성하는 것입니다.
내 문제는 내가 self.params
self.output_params
에 두 사전의 값을 이동하는 방법에 상관없이 동일한 개체 ID를 가지고 있으며, 따라서 self.output_params
에 대한 변경이 self.params
에 반영되어 있다는 점이다. 지금까지 다음을 시도했습니다 :
EDIT 파일 끝에서 deepcopy에 대한 호출이 누락되었습니다.
class A(object):
def __init__(self):
self.a = OrderedDict({'a':1, 'b':2})
self.b = deepcopy(self.a)
self.iter = 0
def do_some_work(self, key):
val = self.a[key]
self.b[key] = val.replace('#', self.iter)
def create(self):
lines = []
for item in self.output_params.items():
lines.append('='.join(item) + '\n')
with open(filename, 'w') as file_obj:
file_obj.writelines(lines)
# Here was the error
self.b = self.a
# should have been self.b = deepcopy(self.a)
당신은 왜 그들이 같은 객체 ID를 공유한다고 생각합니까? '=='는 객체 동일성을 검사하지 않고 * equality *를 검사합니다. – BrenBarn
i는'id()'로도 확인했습니다 – Grr
다음 실제 문제를 보여주는 자체 예제를 보여주십시오. 게시 된 코드의 아무 것도 실제로 객체가 동일한 ID를 갖고 있다는 것을 보여주지 않으며 예제가 자체 포함되지 않았기 때문에 테스트 할 수 없습니다. – BrenBarn