>>> a = [1] >>> b = [2] >>> a.append(b) >>> b.append(a)를 실행하고 확인하면 된다.
첫번째로, 위 코드를 실행 하고, a 와 b 값을 출력해 보면
>>> a [1, [2, [...]]] >>> b [2, [1, [...]]]와 같이 출력된다. a 와 b 모두 값이 계속 반복 되어 진다.
이것을 그림으로 표현해보면
↗→↓
a → [1, ] ↓
↑ ↓
b → [2, ] ↓
↖←↓
와 같이 나타내 볼 수 있다.
두번째로, 레퍼런스 카운트 값을 확인 해보는 것이다.
>>> import sys >>> sys.getrefcount(a) 3와 같이 실행 하면 3이 나오는데, a 와 b 가 참고 하고, getrefcount 를 하면서 한번 더 참고 하기 때문에 총 3이라는 값이 나온다.
세번째로, b를 지운 다음 a 의 레펀런스 카운트 값을 확인하는 것이다.
>>> del b >>> sys.getrefcount(a) 3와 같이 결과가 나오는데, 즉, b가 지워 지더라도 위 그림에서와 같이 단지 b 가 가리키는 것이 없어진 것 뿐이다.
그리고 a를 출력 해보면
>>> print a [1, [2, [...]]]와 같이 나오는데, 객체 역시 변경 되지 않았다.
↗→↓
a → [1, ] ↓
↑ ↓
[2, ] ↓
↖←↓
그림으로 표현 하면 위와 같다.
마지막으로 a를 삭제 해보는 것인데,
>>> del a를 하면 더 이상 두 객체를 건드릴 수 없게 된다. 그렇다고 해서 그 두 객체가 지워진 것은 아니다.
레퍼런스 카운트 값이 0이 되지 않았기 때문이다.
그림으로 표현 하면
↗→↓
[1, ] ↓
↑ ↓
[2, ] ↓
↖←↓
와 같이 가리키는 변수 없이 객체만 남아 있게 된다. 이로 인해서 메모리에 두 객체가 계속 남아 있게 된다.
댓글 없음:
댓글 쓰기