On 7/4/2012 4:37 PM, Michael Ross wrote:
Am 04.07.2012, 21:37 Uhr, schrieb Paul Rubin <phr-2...@nightsong.com>:
I just came across this (https://gist.github.com/1208215):
import sys
import ctypes
pyint_p = ctypes.POINTER(ctypes.c_byte*sys.getsizeof(5))
five = ctypes.cast(id(5), pyint_p)
print(2 + 2 == 5) # False
five.contents[five.contents[:].index(5)] = 4
print(2 + 2 == 5) # True (must be sufficiently large values of 2
there...)
Heh. The author is apparently anonymous, I guess for good reason.
Neat.
Playing with it, i'm wondering:
This:
import sys
import ctypes
pyint_p = ctypes.POINTER(ctypes.c_byte*sys.getsizeof(5))
five = ctypes.cast(id(5), pyint_p)
five.contents[five.contents[:].index(5)] = 4
print ( 2 + 2 == 5 )
print 5
print 5 - 2
put into a script and run prints:
True
4
3
The compile-time optimizer computed the contant 5-2 in C.
while entered at the python prompt it prints:
True
4
2
It must not run for interactive input with the undisclosed version you
are running.
If I run the script in 3.3 Idle, I get the same output you got. If I
then enter '5-2' interactively, I still get 3. Maybe the constant folder
is always on now.
--
Terry Jan Reedy
--
http://mail.python.org/mailman/listinfo/python-list