1

So these questions came to mind because (due to adding an extra zero in a call to a power function) I learned that the python "int" type can be arbitrarily large, atleast until the interpreter runs out of memory to allocate. That prompted me to do an experiment:

import sys

n = 10000

print(2 ** n)
print(len(str(2 ** n)))
print(type(2 ** n))
print(sys.maxsize)
print(len(str(sys.maxsize)))
print(type(sys.maxsize))

This generates the output:

19950631168807583848837421626835850838234968318861924548520089498529438830221946631919961684036194597899331129423209124271556491349413781117593785932096323957855730046793794526765246551266059895520550086918193311542508608460618104685509074866089624888090489894838009253941633257850621568309473902556912388065225096643874441046759871626985453222868538161694315775629640762836880760732228535091641476183956381458969463899410840960536267821064621427333394036525565649530603142680234969400335934316651459297773279665775606172582031407994198179607378245683762280037302885487251900834464581454650557929601414833921615734588139257095379769119277800826957735674444123062018757836325502728323789270710373802866393031428133241401624195671690574061419654342324638801248856147305207431992259611796250130992860241708340807605932320161268492288496255841312844061536738951487114256315111089745514203313820202931640957596464756010405845841566072044962867016515061920631004186422275908670900574606417856951911456055068251250406007519842261898059237118054444788072906395242548339221982707404473162376760846613033778706039803413197133493654622700563169937455508241780972810983291314403571877524768509857276937926433221599399876886660808368837838027643282775172273657572744784112294389733810861607423253291974813120197604178281965697475898164531258434135959862784130128185406283476649088690521047580882615823961985770122407044330583075869039319604603404973156583208672105913300903752823415539745394397715257455290510212310947321610753474825740775273986348298498340756937955646638621874569499279016572103701364433135817214311791398222983845847334440270964182851005072927748364550578634501100852987812389473928699540834346158807043959118985815145779177143619698728131459483783202081474982171858011389071228250905826817436220577475921417653715687725614904582904992461028630081535583308130101987675856234343538955409175623400844887526162643568648833519463720377293240094456246923254350400678027273837755376406726898636241037491410966718557050759098100246789880178271925953381282421954028302759408448955014676668389697996886241636313376393903373455801407636741877711055384225739499110186468219696581651485130494222369947714763069155468217682876200362777257723781365331611196811280792669481887201298643660768551639860534602297871557517947385246369446923087894265948217008051120322365496288169035739121368338393591756418733850510970271613915439590991598154654417336311656936031122249937969999226781732358023111862644575299135758175008199839236284615249881088960232244362173771618086357015468484058622329792853875623486556440536962622018963571028812361567512543338303270029097668650568557157505516727518899194129711337690149916181315171544007728650573189557450920330185304847113818315407324053319038462084036421763703911550639789000742853672196280903477974533320468368795868580237952218629120080742819551317948157624448298518461509704888027274721574688131594750409732115080498190455803416826949787141316063210686391511681774304792596709376
3011
<class 'int'>
9223372036854775807
19
<class 'int'>

I've since found the source code for the integer type. I'll admit that I don't fully (read: hardly) understand it, but I've realized that that doesn't matter. I can think of the integer type as more of a "list of digits" (even though that's hardly accurate) and it makes some sense. On second thought, maybe it would be better to say that the Python 3 int type is closer to BigInteger in Java or C#.

The majority of what's bothering me though, is that I'm running this code in the 32 bit interpreter, and the sys.maxsize call returns the maximum 64 bit value (9,223,372,036,854,775,807). What's up with that?

superstewie
  • 71
  • 1
  • 6
  • 2
    It might help to see here: http://stackoverflow.com/questions/7604966/maximum-and-minimum-values-for-ints – Jeff Mercado Sep 27 '16 at 05:03
  • That almost did it, but there are conflicting answers in that post. One comment says that it just returns the machine word size (What I would assume, but I do not have a 32 bit machine to test it on), another says that in the 32 bit interpreter it will return the 32 bit maximum value. hmmmm.... This is interesting – superstewie Sep 27 '16 at 05:14
  • I think what the takeaway there is that the native `int` maximum is `sys.maxsize`, but if you exceed it, it will use the `long` representation. Remember, Python 3 unifies the `int` and `long` types to just `int`. The runtime type is still `int`, but it may be representing a much larger number. – Jeff Mercado Sep 27 '16 at 05:21
  • So then what's the point of having 32 bit or 64 bit versions of python? If there's no appreciable difference in the function of the two, why not just have 32 bit python interpreters and be done with it? – superstewie Sep 27 '16 at 05:24
  • `Lord blessed google !` – dsgdfg Sep 27 '16 at 05:27

0 Answers0