2011-08-23 7 views
18

목록이 숫자보다 큼을 발견했습니다.숫자보다 큰 파이썬 목록

>>> [1,2,3] > 1000 
True 

왜 작동합니까? int([1,2,3])으로 목록을 int로 변환 할 수 없습니다. int는 list(1000) 인 목록으로 변환 할 수 없습니다. 그렇다면 파이썬은 어떻게이 둘을 비교합니까?

+3

이 코드는 Python 3에서 작동합니까? –

+2

@Mike, no. TypeError가 발생했습니다 –

+2

** 발견 : ** [PEP 3100] (http://www.python.org/dev/peps/pep-3100/)에 묻혔습니다 : "'=='와'! = '이질적인 타입들 사이에 예외가 발생하면 " –

답변

26

이 "일치하지 않는"유형의 경우, 유형은 유형 이름별로 사전 식으로 나열됩니다. "목록"은 알파벳 순으로 "int"뒤에 오므로 더 큽니다.

CPython 구현 세부 사항 : 을 제외한 다른 유형의 객체는 유형 이름으로 정렬됩니다. 적절한 비교를 지원하지 않는 동일한 유형의 객체 인 은 해당 주소로 정렬됩니다. (source)

주문에 대한 언어 사양은 없습니다 (일관성을 제외하고는). CPython은 유형 이름별로 사전 순으로 정렬되는 언어에 대한 세부 정보가있는 가장 일반적인 구현입니다. Python Reference Manual에 따르면

+8

방금 ​​이렇게 말했습니다. Python 3에서는 비교할 수없는 수준입니다. 또한, Python 2.x에서는 None은 항상 다른 것들과 비교합니다. – RxS

+1

@Uku Loskit _ "유형은 사전 식으로 나열됩니다"_ 어디서? – eyquem

+0

@ machine yearning & eyquem : 답변을 조금 업데이트했습니다. –

10

, 그들은 같은 객체 않는 불평등 비교 내장 타입의

대부분의 다른 개체; 하나의 객체가 다른 객체보다 작거나 큰지를 선택하는 것은 프로그램의 한 실행 내에서 임의로하지만 일관되게 이루어진다.