is


   -식별 연산자(identity operator)로서 값이 아닌 주소를 비교한다.

 

==


   -비교 연산자로서 값을 비교한다.

 

 

 

예시

n1 = 257
n2 = 257

s1 = "duck"
s2 = "duck"

print(n1 == n2)
print(n1 is n2)

print(s1 == s2)
print(s1 is s2)

>>True
>>True
>>True
>>True
n1 = 257
n2 = 256

s1 = "duck"
s2 = "duc"

print(n1 == n2+1)
print(n1 is n2+1)

print(s1 == (s2+'k'))
print(s1 is (s2+'k'))

>>True
>>False
>>True
>>False

 

위의 예시는 모두 True가 나온 것을 볼 수 있고 

아래의 예시는 is 연산에서 False가 나온 것을 볼 수 있다.

 

파이썬은 새로운 변수에 할당하려는 값이 이미 메모리에 존재하면 새로운 값을 생성하지 않고

기존에 존재하는 메모리를 가리키게 한다.

 

아래의 예시를 보면

연산의 값은 257, duck 둘 다 동일하나 n1과 n2(s1과 s2)가 가리키는 메모리 주소가 다르기 때문에 is연산에서는 False가 반환되는 것을 볼 수 있다.

 

n1 = 257
n2 = 256

s1 = "duck"
s2 = "duc"

print(id(n1))
print(id(n2+1))

print(id(s1))
print(id(s2+'k'))

>>1356657452880
>>1356657452464
>>1356657710840
>>1356686985848

#메모리 주소값이 다른 것을 확인할 수 있다.

 

※예시와 다르게 257보다 작은 양의 정수를 사용하면 is연산을 해도 True값이 나오는 것을 볼 수 있다. 

  Python은 자주 사용되는 작은 정수, [-5,256] 범위의 정수들을 미리 캐싱해놓기 때문에 해당 범위의 값은 항상 같은 주    소를 가리킨다.

'Python' 카테고리의 다른 글

Python - 딕셔너리 키(key), 값(value) 도치  (0) 2020.08.04
Python - with 문  (0) 2020.08.01
Python - 에일리어스(alias)  (0) 2020.07.29
Python - 모듈(module)  (0) 2020.07.27
Python - 단락 평가(Short-circuit Evaluation)  (0) 2020.07.26

파이썬에서 두 변수가 가리키는 메모리 주소가 같으면 서로의 에일리어스(alias)라고 말한다.

문자열처럼 그 자체의 값이 변경 불가능한 값은 에일리어스를 생성해도 안전하지만,

리스트(list) 같은 가변적인 값은 에일리어스를 생성하게 되면 프로그램의 흐름이 개발자의 의도와 다르게 흘러갈 수 있다.

 

예시

list1 = [1,2,3,4,5]
list2 = list1		#list1과 list2는 alias
list1[0]=0			#list1[0]값 변경
print(list1)
print(list2)

>>[0, 2, 3, 4, 5]
>>[0, 2, 3, 4, 5]	#list2[0]값도 변경된 것을 볼 수 있다.

list1과 list2는 같은 리스트를 참조하고 있고, 인덱싱을 이용해 새로운 리스트를 생성하는 것이 아니라 list1[0]의 값을 "변경"하게 되므로 이와 같은 결과가 나타난다. (두 리스트가 함께 참조하고 있는 리스트의 값을 변경)

 


한 리스트와 그 리스트를 인수로 받은 매개변수도 서로 에일리어스 관계이다.

def remove_list(L:list) ->None:
    del L[0]		#매개변수 L의 값을 변경	(L과 아래의 list1은 같은 리스트를 참조)
list1 = [1,2,3,4,5]
remove_list(list1)		#L == list1
print(list1)

>>[2,3,4,5]

list1의 값을 복사해서 L에게 전달해주는 것으로 보일 수 있으나 실제로는 list1이 가리키는 주소 값을 전달해 주는 것이다.

'Python' 카테고리의 다른 글

Python - with 문  (0) 2020.08.01
Python - is와 ==의 차이 (and,or,&,|)  (1) 2020.07.29
Python - 모듈(module)  (0) 2020.07.27
Python - 단락 평가(Short-circuit Evaluation)  (0) 2020.07.26
Python - 사용자 입력(input())  (0) 2020.07.26

모듈이란 한 파일로 묶인 변수와 함수의 모음이다.

프로그램을 작성할 때 한 파일 안에 모든 변수와 함수를 저장하는 것보다, 여러 모듈을 생성해 용도가 비슷한 변수와 함수끼리 묶어 작성하는 것이 좋다.

 

모듈 사용법


모듈을 작성하는 법은 간단하다. main으로 사용할 파이썬 파일과 같은 디렉토리에 새로운 파이썬 파일을 생성한 뒤

필요한 함수와 변수를 작성하면 된다.

작성한 모듈을 사용하는 법은

먼저 모듈을 작성한 뒤

#test.py		#test모듈 생성

x=1
y=2

def add(a:int,b:int)->int:
	return a+b;
    

해당 모듈을 사용할 파일에서 import한 후 변수 또는 함수를 사용하면 된다.

import test			#test모듈을 import한다.

x = test.x+test.y
result = test.add(x,5);	
print(result)

>>8

 

 

위의 예제를 보면 추가한 모듈의 변수와 함수를 사용할 때는 꼭 앞에 <<모듈명>>. 을 붙여준다.

모듈명을 붙이지 않고 사용하면

import test

result=add(3,5)

print(result)

>>Traceback (most recent call last):
  File ".................................", line 3, in <module>
    result=add(3,5);
NameError: name 'add' is not defined	#함수 add를 찾을 수 없다는 오류

 

파이썬에서 모듈을 import 하게 되면 모듈과 같은 이름의 변수가 형성된다.

import test

print(type(test))

>> <class 'module'>	#타입은 module

test파일에서 작성한 변수와 함수는 위의 변수 test 내부에 저장되어있다.

import test

print(help(test))

>>Help on module test:

NAME
    test

FUNCTIONS
    add(a: int, b: int) -> int

DATA
    x = 1
    y = 2

FILE
    c:...........................\test.py		#파일 경로


None

따라서 모듈 내부의 변수나 함수를 사용할 때는 꼭 모듈명을 붙여줘야 한다.

 

 


※모듈의 변수나 함수중 일부분만 import하는 방법도 있다.

from test import add		#from <<모듈명>> import <<변수명,함수명>>

print(add(3,5))		#test모듈의 add만 가져온 것이므로 앞에 모듈명을 붙이지않아도 된다.

>>8

+ Recent posts