Использование функции reshape
:
reshape(dat1, idvar = "name", timevar = "numbers", direction = "wide")
Он является на основе None id
, но None является одним из нескольких объектов Python, которые определены как глобальные переменные C, поэтому его адрес (обычно) не изменяется между прогонами Python. Другие такие объекты: True
и False
(но они хэшированы как int) или встроенные классы, такие как object
и tuple
.
Адрес (и хэш) отличается от однако, разные сборки CPython. В моей системе hash(None)
выдает 539708.
Поскольку None
является объектом, я написал функцию object_hash
для вычисления хеша объекта:
import sys
import struct
def int_overflow(value):
""" simulate integer overflow """
m = sys.maxint + 1
return (value + m) % (m * 2) - m
def object_hash(value):
res = id(value)
sizeof_void_p = struct.calcsize('P')
res = int_overflow((res >> 4) | (res << (8 * sizeof_void_p - 4)))
if res == -1:
res = -2
return res
Полученные хэши равны:
>>> hash(None)
492116
>>> object_hash(None)
492116L
Он основан на адресе None
в памяти , как указывает определение типа .
True
или любой объект, который не отменяет__hash__
. И сPYTHONHASHSEED
установите дляrandom
(рекомендуется для веб-серверов) для строк. – Petr Viktorin 20 September 2012 в 08:20