1 == 2 [값비교]
1 is 2 [주소 비교]
is를 이용한 다양한 실험
얕은 복사, 깊은복사,is를 이용
1. integer은 값이 달라지면 주소가 달라진다 == 값이 같으면 같은 주소를 갖는다(deepcopy를 하더라도)
주소의 효율을 위해 어느정도의 숫자 범위 안에서는 같은 값은 같은 주소를 같는다.import implements from copy import * a=100100100 b=a #얕은복사(주소복사) c=deepcopy(a) #깊은복사(값 복사) print(a is b); print(a is c)
[print] True True
2. float 타입은 같은 float 여도 부동 소수점의 이유로 다른 주소값을 갖는다.
import implements a=1 b=1.00 c=1.00 print(a is b) ; print(b is c)
[print] False False
3. sequence 타입에서 배열 자체가 갖는 주소는 얕은 복사에서는 같고, 깊은 복사에서는 다름
또, 배열의 원소가 가리키는 주소값은 int에서의 그 값의 주소와 같음import implements from copy import * a= [1,2,3,4,5] copy1 = a copy2 = deepcopy(a) print(a is copy1); print(a is copy2)
[print] True False
or
(True or ~) == True / (False or ~) == ~
True or True == True
True or False == True
False or True == True
False or False == FalseTrue 먼저 나올때, 뒤에 어떠한 값이와도 True
False 먼저 나올때, 뒤에 값을 따름
and
and : (False and ~) == False / (True and ~) == ~
False and True == False
False and False == False
True and False == False
True and True == TrueFalse 먼저 나올때, 뒤에 어떠한 값이 와도 False
True 먼저 나올때, 뒤에 값을 따름
https://docs.python.org/ko/3/library/stdtypes.html#text-sequence-type-str
import implements a=1 b=1.0 print(a is b) print(a is int(b)) print(float(a) is b)
[print] False True -> integer에서 하나의 값은 하나의 주소만 갖음(작은 수 범위) False -> float는 값이 같아도 다른 주소 갖음(사실 값이 소숫점까지 고려하면 다르기 때문)