PYTHON - reference

다음과 같은 list가 있다고 하자.
>>> X = [0,1,2]
>>> Y = [X]

위와 같이 정의하면, Y는 다음과 같다.
>>> Y
[[0, 1, 2]]

이제 X의 component 가운데 하나를 변경해보자.
>>> X[1] = 0

그럼 Y가 변함을 알 수 있다.
>>> Y
[[0, 0, 2]]

전체를 다 바꿔보자.
>>> X = 0

Y가 변하지 않는 것을 확인할 수 있다.
>>> Y
[[0, 0, 2]]

아무래도 이전의 X와 뒤바뀐 X가 같은 X로 여겨지지 않는 모양이다.

다음과 같이 하면, 공유를 피할 수 있다.
>>> X = [0,1,2]
>>> Y = [X[:]]
>>> X[1] = 0
>>> Y
[[0, 1, 2]]

덧글

  • 바죠 2008/08/03 11:53 #

    주의 해야할 점을 잘 적어주셨습니다.

    x, y가 리스트를 참조한다고 가정, mutable object인 리스트를 참조할 때.

    y=x[:]
    이것은 새로운 탄생을 의미한다. 내용물은 같다.

    y=x
    와는 다른 특성이 있습니다. 이경우
    y는 여전히 x를 바라보고 있다.
  • wolga 2008/08/03 20:17 #

    바죠님. 사전도 동일하게 적용되는 것 같습니다.

    >>> X = [0,1,2]
    >>> Y = {'xx':X}
    >>> Y
    {'xx': [0, 1, 2]}
    >>> X[1] = 0
    >>> Y
    {'xx': [0, 0, 2]}
※ 로그인 사용자만 덧글을 남길 수 있습니다.