Quelqu'un sait-il comment Python gère en interne les types int et long ?
- Choisit-il le bon type de manière dynamique ?
- Quelle est la limite pour un int ?
- J'utilise Python 2.6, est-ce différent des versions précédentes ?
Comment dois-je comprendre le code ci-dessous ?
>>> print type(65535)
<type 'int'>
>>> print type(65536*65536)
<type 'long'>
Mise à jour :
>>> print type(0x7fffffff)
<type 'int'>
>>> print type(0x80000000)
<type 'long'>
0 votes
Les types stdc ne sont-ils pas simplement mappés à la volée sous CPython ?
0 votes
Oui, je pense que c'est le cas. Je soupçonne également que tout est alloué sur le tas, de sorte que lorsqu'un nombre a besoin d'une plus grande précision, il suffit de
realloc
Tout va bien. Mais je ne suis pas tout à fait sûr, alors je laisserai la réponse à quelqu'un d'autre.2 votes
Vous pouvez également forcer python à utiliser une variable longue avec
var = 666L
10 votes
@Ignacio : FAUX Un CPython
int
est un Clong
(la valeur par défaut est signée) ... voir<CPython 2.X source>/Include/intobject.h
: typedef struct { PyObject_HEAD long ob_ival ; } PyIntObject ; Dans tous les cas, Python 2.xint
autorise les nombres négatifs ; un Cunsigned
ne pouvait pas faire face à la situation.0 votes
PEP 237 explique comment, sous le capot, Python est censé faire en sorte que tout cela soit apparemment identique.