홈>
두 개의
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
관련 자료
- php - 양방향 관계에 대한 예기치 않은 행동 교리
- ios - 스토리 보드 대신 프로그래밍 방식의보기를 추가 한 후 예상치 못한 nil
- php - __dir__의 예기치 않은 동작 ("xdebug - "로 평가)
- python - tfslim 및 inception_v1을 사용한 모델 유효성 검사에서 예기치 않은 동작
- python - pdconcat (array) groupby ( 'date') sum ()은 예기치 않은 동작을 반환합니다
- c++ - winapi CALLBACK 함수에서 FALSE를 반환 할 때 예기치 않은 동작이 발생합니다 (루프를 건너 뜁니까?)
- c++ - 장치에서 직렬 통신 중 예기치 않은 동작
- r - dplyr 및 날짜의 예기치 않은 동작
- scikit learn - Sklearn의 정식 상관 분석 (CCA)의 예기치 않은 동작
- html - R에서 예기치 않은 gsub 동작
- javascript - 백 슬래시 JS를 이스케이프 처리 할 때 예기치 않은 동작
- windows - 예기치 않은 CDialog DoModal () 동작
- corda - CashCommandsIssue ()의 예기치 않은 동작
- 문자열 길이를 확인하는 동안 자바 스크립트에서 예기치 않은 동작에 직면
- javascript - 음수 인덱스를 가진 arraysplice 예기치 않은 동작
- void와 함께 함수 인터페이스를 사용할 때 예기치 않은 유형 스크립트 컴파일러 동작
- android - 빠른 스크롤 할 때 recyclerview의 viewpager에서 예기치 않은 동작을 수정하는 방법은 무엇입니까?
- r - case_when 및 isna의 예기치 않은 동작
- python - rpy2에서 asDate ()를 사용하는 예기치 않은 동작
- bash - 문자 'a'와 함께 문자 세트를 사용하면 특정 디렉토리 내에서 예기치 않은 동작이 발생합니다
관련 질문
- python : 생성기 표현식을 목록으로 변환하는 다른 방법은 무엇입니까?
- python : 값이 두 번 이상 나타나면 값을 취하는 목록 만들기
- python : for 루프를 사용하여 각 항목 없이 모든 목록을 인쇄하려면 어떻게 해야 합니까? 파이썬에 대안이 있습니까?
- python : 파이썬에서 목록을 어떻게 정렬할 수 있습니까? [복제하다]
- python : for 루프가 내 데이터 프레임 값을 함수에서 반환된 NaN으로 변경한 이유는 무엇입니까?
- python : '데이터' 유형을 조정할 수 없습니다.
- python : pyglet: on_resize가 그래픽을 깨뜨립니다.
- python : 파이썬을 설치하는 설치 프로그램을 어떻게 만들 수 있습니까?
- python : 파이썬의 목록에서 고유한 문자열을 인쇄하고 싶지만 목록이 깨집니다.
- python : 목록을 사용하여 크기가 m*n인 0 행렬을 만들려고 하지만 원하는 모양으로 출력을 인쇄할 수 없습니다.
첫 번째 경우, 동일한 객체 (
[]
)를 전달합니다 ) 둘 다msg1
&msg2
.msg1
를 사용하여 해당 오브젝트를 수정할 때msg2
또한 그 변화를 봅니다.msg2
에서 다른 객체를 사용하려는 경우log
를 복사해야합니다. 또한 :이것은 두 번째 경우에 수행하는 작업이므로 작동합니다.