2017-12-28 17 views
0
num = [1,2,3,4] 
num == list(num) 

이 같은 진정한, 왜 '목록 (목록) 목록'은 파이썬에서 거짓입니까?

num is list(num) 

거짓을 제공을 제공합니다.

이 두 가지의 차이점은 무엇입니까? 두 문장에서 파이썬은 무엇을 하는가?

+0

@Ashwani. 꽤 속아. Tuple은이 동작을 나타내지 않지만 string과 list는 동작합니다. 여기에는 특정 유형이 중요합니다. –

답변

3

==은 내용을 비교하는 두 목록에 대해 list.__eq__을 호출합니다. is은 객체 참조를 비교합니다. is을 반환하면 True은 두 이름이 모두 메모리의 동일한 개체를 가리키는 것을 의미합니다.

결과가 list인 경우 항상은 입력이 다른 목록 인 경우에도 얕은 복사본을 만듭니다. 그 이유는 list이 변경 가능한 유형이기 때문입니다. 당신은 다른 것을 수정하지 않고 하나의리스트를 수정할 수 있기를 원한다. 그렇지 않으면 왜 생성자를 호출하는 것을 왜 귀찮게 하는가?

동일한 동작은 변경할 수없는 tuple에서 발생하지 않습니다. tuple(some_tuple) is some_tupleTrue입니다.

+0

감사합니다. 너는 그것을 잘 설명했다. – karthiq

1

list()은 새 목록을 만듭니다. 새롭게 생성 된 목록은 원본과 동일하지만 (==) 동일하지는 않습니다 (is).