나는 다음과 같은 코드가 있습니다이상한 목록 동작
이d = [1,2,3,4]
dpop = d.pop
d = ["A","B","C"]
dpop() # return 4
d.pop() #return C
그럼, 왜 내 첫 번째 목록이 여전히 존재를? 어디?
나는 다음과 같은 코드가 있습니다이상한 목록 동작
이d = [1,2,3,4]
dpop = d.pop
d = ["A","B","C"]
dpop() # return 4
d.pop() #return C
그럼, 왜 내 첫 번째 목록이 여전히 존재를? 어디?
첫 번째 목록은 dpop
이 가리키는 메서드 개체에 대한 참조가 유지되므로 첫 번째 목록이 존재합니다.
기본적으로, 당신이했던 것은 이것이다 :
dpop = [1,2,3,4].pop
당신은 당신이 처음에했던 목록의 인스턴스와 관련된 dpop
에 저장 한 pop
방법의 예 (당신은 할 수 dpop.__self__
에서 찾으십시오.)
s/function/method/g 에서처럼 메모리의 고정 된 공간을 참조하지 않습니다. –
'dpop'는 바운드 메소드입니다. 원래 목록은'dpop .__ self__'를 통해 접근 할 수 있습니다. –
앰버, @SvenMarnach 좋은 흥미로운 대답! –
boundmethod
개체에 대한 참조를 유지합니다. 개체 자체는 인스턴스에 대한 참조를 유지합니다. cf https://wiki.python.org/moin/FromFunctionToMethod 파이썬 메소드가 실제로 무엇인지 더 알고 싶습니다.
파이썬의 변수 이름은 개체에 붙이는 레이블 일뿐입니다. C. –