파이썬 기초 공부중인데 이해안되는게 있네요

'''

a=[1,2,3]

import copy

b=copy.copy(a)

a==b and a is b

?

'''

?의 답을 찾는 문제인데 a is b가 왜 False 인지 이해가 안되요.

둘다 똑같이 [1,2,3]으로 나오는뎅...힝..

1답변

  • == 는 값을 비교하고 is 는 주소를 비교합니다.

    a 변수와 b 변수는 1, 2, 3 정수를 갖고 있는 리스트를 담고 있습니다.

    변수가 의미하고 있는 은 동일합니다. 하지만 두 변수가 보유하고 있는 메모리 주소가 같은 곳일 까요?

    copy.copy 는 새로운 메모리 주소에 동일한 값을 갖도록 복사를 하는 작업을 합니다. 그렇기 때문에 ab 는 서로다른 메모리 주소에 리스트를 저장하고 있습니다.

    import copy
    a = [1, 2, 3]
    b = copy.copy(a)
    
    print(id(a))
    print(id(b))
    

    위 코드를 실행해 보시면 화면에 출력되는 ab 에 주소가 다를 것을 알 수 있습니다.

    is 는 주소를 비교하여 동일한 인스턴스인지를 확인하기 때문에 결과가 False 가 됩니다.

    • 아아!!! 주소가 다른거였구나.. 고맙습니다 ㅎㅎ 단번에 이해가 됐어요! 정석호 2017.11.14 23:26

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.