Nested List, Reference, ==(Equivalence)와 is(Assignment)의 차이
Language/Python

Nested List, Reference, ==(Equivalence)와 is(Assignment)의 차이

뉴비뉴 2020. 6. 1.

안녕하세요.

 

리스트 안에 또 리스트가 있는 형태를 Nested List 라고 합니다.

아래 예시를 확인해보겠습니다.

x = [1, 2, 3]
y = [100, [1, 2, 3], 999]

y의 경우 Nested List의 형태가 되는 것이죠.

 

Nested Lists Example

그럼 만약 아래와 같은 형태는 어떻게 출력이 될까요?

x = [1, 2, 3]
y = [100, [1, x, 3], 999]

여기서 y안에 들어있는 x는 위에 정의한 리스트를 가르키게 됩니다.

y를 프린트를 찍어보면 y = [100, [1, [1, 2, 3], 3], 999] 와 같이 출력됩니다.

 

그렇다면 x의 값을 변경하게 되면 어떻게 될까요?

정답은 y 안의 값도 같이 변경됩니다. 왜냐하면 y 안의 x는 참조와 같은 역할을 하는데

x의 값을 Reference 하고 있기 때문에 x의 값이 변경되면 y안에 있는 x의 값도 변경됩니다.

 

==는 Checks the equuivalence of two referenced values 이고,

isChecks the equivalence of two referenced objects' IDs 입니다.

 

간단하게 정리하면 ==는 values를 비교하여 결과를 리턴하고,

is는 오브젝트의 ID를 확인합니다.

x = [1, 2, 3]
x2 = [1, 2, 3]

if x == x2:
    print('True')
else:
	print('False')

위 코드의 결과는 True라는 결과를 리턴합니다.
오브젝트의 내용을 비교하는데 리스트 안에 내용이 같습니다.

if x is x2:
	print('True')
else:
	print('False')

위 코드의 결과는 어떻게나올까요?
안에 값은 똑같지만 오브젝트가 가리키는 주소가 다르기 때문에 False가 출력됩니다.

그렇다면 is 의 결과가 true가 나오게 하려면 어떻게 해야할까요?

x = [1, 2, 3]
x2 = x  # x2가 x의 오브젝트 ID를 Reference

if x is x2:
	print('True')
else:
	print('False')
    

 

값을 비교하는 것과 레퍼런스를 비교하는 것은 다르다.

 

 

댓글

💲 추천 글