안녕하세요.
리스트 안에 또 리스트가 있는 형태를 Nested List 라고 합니다.
아래 예시를 확인해보겠습니다.
x = [1, 2, 3]
y = [100, [1, 2, 3], 999]
y의 경우 Nested List의 형태가 되는 것이죠.

그럼 만약 아래와 같은 형태는 어떻게 출력이 될까요?
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 이고,
is는 Checks 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')
값을 비교하는 것과 레퍼런스를 비교하는 것은 다르다.
'Language > Python' 카테고리의 다른 글
| 캡슐화 그리고 상속 (0) | 2020.07.02 |
|---|---|
| Class and Instance, Construct, Destructor (0) | 2020.06.02 |
| List, Tuple, Dictionary, If, for, function, (0) | 2020.05.24 |
| Python 비동기 - Celery, Dramatiq (0) | 2020.03.05 |
| swagger @method_decorator, @swagger_auto_schema (0) | 2020.02.25 |
댓글