Apakah ada yang tahu bagaimana Python mengelola tipe int dan long secara internal?
- Apakah ia memilih jenis yang tepat secara dinamis?
- Berapa batas int?
- Saya menggunakan Python 2.6, Apakah berbeda dengan versi sebelumnya?
Bagaimana saya harus memahami kode di bawah ini?
>>> print type(65535)
<type 'int'>
>>> print type(65536*65536)
<type 'long'>
Memperbarui:
>>> print type(0x7fffffff)
<type 'int'>
>>> print type(0x80000000)
<type 'long'>
realloc
. Tapi saya tidak begitu yakin, jadi saya akan menyerahkan jawabannya kepada orang lain.var = 666L
int
adalah Clong
(default ditandatangani) ... lihat<CPython 2.X source>/Include/intobject.h
: typedef struct {PyObject_HEAD long ob_ival; } PyIntObject; Bagaimanapun, Python 2.xint
mengizinkan bilangan negatif; a Cunsigned
tidak akan mengatasinya.Jawaban:
int
danlong
"disatukan" beberapa versi sebelumnya . Sebelumnya itu mungkin untuk melimpah int melalui operasi matematika.3.x telah memajukan lebih jauh ini dengan menghilangkan long sama sekali dan hanya memiliki int.
sys.maxint
berisi nilai maksimum yang dapat ditampung oleh int Python.sys.getsizeof()
.sys.maxsize
berisi ukuran maksimum dalam byte yang bisa dimiliki oleh int Python.sys.maxsize
.sumber
int
sama dengan Python 2long
).PEP ini akan membantu.
Intinya adalah Anda tidak perlu khawatir tentang itu di versi python> 2.4
sumber
Di mesin saya:
Python menggunakan ints (bilangan bulat bertanda 32 bit, saya tidak tahu apakah itu C int atau tidak) untuk nilai yang sesuai dengan 32 bit, tetapi secara otomatis beralih ke long (sejumlah besar bit sewenang-wenang - yaitu bignum) untuk apa pun lebih besar. Saya menduga ini mempercepat segalanya untuk nilai yang lebih kecil sambil menghindari luapan apa pun dengan transisi mulus ke bignum.
sumber
Menarik. Di kotak 64-bit (i7 Ubuntu) saya:
Tebak itu melangkah hingga 64 bit int pada mesin yang lebih besar.
sumber
Python 2.7.9 mempromosikan angka secara otomatis. Untuk kasus di mana seseorang tidak yakin untuk menggunakan int () atau long ().
sumber
Python 2 secara otomatis akan mengatur jenis berdasarkan ukuran nilainya. Panduan nilai maks dapat ditemukan di bawah.
Nilai Max dari Int default di Python 2 adalah 65535, apapun di atasnya akan menjadi panjang
Sebagai contoh:
Dalam Python 3, tipe data panjang telah dihapus dan semua nilai integer ditangani oleh kelas Int. Ukuran default Int akan bergantung pada arsitektur CPU Anda.
Sebagai contoh:
Nilai min / max dari setiap jenis dapat ditemukan di bawah ini:
Jika ukuran Int Anda melebihi batas yang disebutkan di atas, python akan secara otomatis mengubah jenisnya dan mengalokasikan lebih banyak memori untuk menangani peningkatan nilai min / max ini. Di Python 2, itu akan diubah menjadi 'panjang', sekarang hanya diubah menjadi ukuran Int berikutnya.
Contoh: Jika Anda menggunakan sistem operasi 32 bit, nilai maksimal Int Anda adalah 2147483647 secara default. Jika nilai 2147483648 atau lebih ditetapkan, tipe akan diubah menjadi Int64.
Ada berbagai cara untuk memeriksa ukuran int dan alokasi memorinya. Catatan: Dalam Python 3, menggunakan metode built-in type () akan selalu mengembalikan
<class 'int'>
berapa pun ukuran Int yang Anda gunakan.sumber
Dari python 3.x, libries integer terpadu bahkan lebih pintar dari versi sebelumnya. Di kotak (i7 Ubuntu) saya, saya mendapatkan yang berikut ini,
Untuk detail implementasi, lihat
Include/longintrepr.h, Objects/longobject.c and Modules/mathmodule.c
file. File terakhir adalah modul dinamis (dikompilasi menjadi file jadi). Kode ini dikomentari dengan baik untuk diikuti.sumber
Sekadar melanjutkan semua jawaban yang diberikan di sini, terutama @James Lanes
ukuran tipe integer dapat diekspresikan dengan rumus ini:
kisaran total = (2 ^ sistem bit)
batas bawah = - (2 ^ sistem bit) * 0,5 batas atas = ((2 ^ sistem bit) * 0,5) - 1
sumber
Itu mengaturnya karena
int
danlong
merupakan definisi kelas saudara. Mereka memiliki metode yang sesuai untuk +, -, *, /, dll., Yang akan menghasilkan hasil dari kelas yang sesuai.Sebagai contoh
Dalam hal ini, kelas
int
memiliki__mul__
metode (yang mengimplementasikan *) yang membuatlong
hasil saat diperlukan.sumber