[Thomas] > Earlier today I typed the following into my pythonwin interactive > interpreter in windows xp: > > >>> int('7' * 10 ** 6) > > I expected either an error message
Unlikely, if your box has enough RAM to run WinXP :-) > or it to get stuck and require me to stop the process manually. Not that either, but it will take a long time. There are two quadratic-time base conversions going on here, one to convert the million-digit decimal string to a large binary integer, and then again in the other direction to display the result as a decimal string. In all, using Python 2.4.3 from a "DOS box" shell under WinXP on a pretty fast box, this consumed about 16 minutes of CPU time, and process memory use peaked at a relatively measly 11.3 MB. > I read that unlike long integers in C, longs in python are only limited by > the amount of memory (and virtual memory) your system has. That's right. > Can you guess what it did? Nope. > I'm temped to end the post here, but I'm new to this list and its possible > that people might be annoyed by me not getting to the point within my > initial post, /Very/ good guess :-) > so here's what it did: > > It thought about it for about 2 seconds then restarted my pc! explanations > welcome. Don't have one: as above, it worked fine when I tried it. I wasn't using PythonWin, although hard to guess why that would matter. I wouldn't be surprised to see a GUI shell die a horrid death of some kind when asked to display a million-character string, but 2 seconds is far too short a time for your attempt to have gotten that far. If you want to play, break it into two steps: >>> i = int('7' * 10 ** 6) That much does /only/ the decimal-string -> large binary integer part. Don't display i until the next step. For display, it's /enormously/ faster to convert to a power-of-2 output base (instead of to decimal), like >>> print hex(i) In more detail, >>> from time import clock as now >>> from math import log10 >>> log10(i) 999999.89085553051 >>> t = now(); ashex = hex(i); now() - t 0.0097427830685340843 That is, converting the big binary integer to a hex string took less than a hundreth of a second, instead of the minutes required to convert to a decimal string. >>> len(ashex) 830485 _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor