반응형
파이썬을 쓰다보면 두 변수의 값과 가리키는 객체가 같은지를 비교해야 할 떄가 있다.
보통 값을 비교할 떄는 == 을, 객체를 비교할 때는 is를 쓴다.
>>> a = [1,2,3]
>>> b = [1,2,3]
>>> a is b
False
>>> a == b
True
a와 b 리스트의 값은 같지만, 두 변수는 가리키는 객체가 다르다.
만약 '두 변수의 값이 같고 두 객체는 서로 달라야 한다'라는 조건이 필요하면 아래와 같이 assert를 통해 해당 경우가 아닐떄 에러를 유발시킬 수 있다.
>>> assert b == a and b is not a
>>> a = [1,2,3]
>>> b= a
>>> assert b == a and b is not a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError
>>> a[2] = 4
>>> b
[1, 2, 4]
b에 a 값을 그대로 넣었으므로 a와 b는 같은 객체이다. 즉 a를 변경하면 이에 대한 변경이 b에도 반영된다. 참고로 값은 같고 완전히 다른 객체로 만들고 싶다면 슬라이싱을 활용하면 된다.
>>> a = [1,2,3]
>>> b = a[:]
>>> assert b == a and b is not a
>>> a[2] = 4
>>> b
[1, 2, 3]
반응형
'Python' 카테고리의 다른 글
[Python] 파이썬으로 엑셀 파일(xlsx) 다루기 (읽기,쓰기,수정,추가) (1) | 2022.10.24 |
---|---|
[python] nonlocal 키워드 그리고 global 와의 차이점 (0) | 2022.10.02 |
[python] 파이썬 버전 확인하기 (0) | 2022.09.29 |
[python] 재귀함수를 사용한 list 평탄화 (flatten) (0) | 2022.05.08 |
[python] 함수 정의시 화살표(->)와 콜론(:) 의미 (0) | 2022.05.05 |