>

두 개의 functions 선물 :

class Message:
def __init__(self, text, log):
    self.text = text
    self.log = log
def copy(self):
    return Message(self.text, self.log)
def add(self, more):
    self.text += more
    self.log += more
    return self
msg1 = Message("",[]).add("A")
msg2 = msg1.copy().add("B")
print(msg1.text, msg1.log)
print(msg2.text, msg2.log)

prints  

A ['A', 'B'] AB ['A', 'B']

예기치 않은 일이 생겼습니다-

list_1 = [1]
list_2 = list_1.copy()
list_2 += 'b'
print(list_1)  # prints [1]
print(list_2)  # prints [1,'b']

따라서 두 함수에서 + =를 사용하는 것과 왜 동작이 다른지 이해할 수 없습니다. object.__iadd__ 에 대한 문서를 읽었습니다.  그러나 내 문제에 대한 해결책을 실제로 이해할 수 없었습니다.

  • 답변 # 1

    첫 번째 경우, 동일한 객체 ( [] )를 전달합니다 ) 둘 다 msg1  & msg2 . msg1 를 사용하여 해당 오브젝트를 수정할 때 msg2  또한 그 변화를 봅니다.

    msg2 에서 다른 객체를 사용하려는 경우 log 를 복사해야합니다.  또한 :

    def copy():
        return Message(self.text, self.log.copy())
    
    

    이것은 두 번째 경우에 수행하는 작업이므로 작동합니다.

관련 자료

  • 이전 kafka-jms-client가 지원하지 않는 기능을 사용하면 kafka가 어떻게 응답합니까?
  • 다음 javascript - localStorage로 저장할 수없는 컨텐츠 편집 가능