Di banyak bahasa pemrograman, sebuah variabel menikah dengan satu tipe data sejak dideklarasikan dan tidak boleh berpindah ke tipe lain. Python memilih jalan sebaliknya: variabel di Python tidak memiliki tipe — yang bertipe adalah object yang ditunjuknya. Karakteristik ini disebut dynamic typing, dan memahaminya menjelaskan mengapa kode Python begitu ringkas sekaligus mengapa galat tipe kadang baru muncul di tengah jalan.

Variabel Boleh Berganti Tipe #

Karena assignment hanya mengikatkan nama ke object (seperti yang kita pelajari pada Chapter Memahami Object dan Reference), nama yang sama boleh dipindahkan dari object bertipe satu ke object bertipe lain kapan saja:

python
data = 42
print(type(data))
data = "empat puluh dua"
print(type(data))
data = 3.14
print(type(data))

Output yang Dihasilkan:

text
<class 'int'>
<class 'str'>
<class 'float'>

Mari kita telaah jalannya program:

  1. Baris 1 (data = 42): nama data diikat ke object int bernilai 42.
  2. Baris 3 (data = "empat puluh dua"): nama data dipindahkan ke object str yang sama sekali baru — object int yang lama tidak diubah, melainkan ditinggalkan.
  3. Baris 5 (data = 3.14): nama data berpindah lagi ke object float.

Penting dicatat: ini bukan “mengubah tipe nilai” — object 42 tidak pernah berubah menjadi string. Yang terjadi hanyalah pengikatan ulang nama ke object baru yang bertipe berbeda.

Dynamic versus Static Typing #

Perbedaan mendasar antara kedua aliran ini terletak pada waktu pemeriksaan tipe:

AspekDynamic Typing (Python)Static Typing (Java, C, Rust)
Pemeriksaan tipesaat program berjalan, baris demi barissebelum program berjalan, oleh compiler
Deklarasi tipe variabeltidak diperlukanwajib saat deklarasi
Variabel berganti tipeboleh, lewat assignment baruditolak compiler
Galat tipe terdeteksisaat baris bermasalah dieksekusisejak proses kompilasi
Contoh bahasaPython, JavaScript, RubyJava, C, C++, Rust

Kedua kubu membayar harga yang berbeda. Static typing menangkap galat tipe lebih awal dan membantu editor melengkapi kode, tetapi menuntut upacara deklarasi di setiap baris. Dynamic typing membuat kode pendek dan cepat ditulis, tetapi galat seperti menjumlahkan string dengan angka baru terlihat saat baris tersebut benar-benar dieksekusi — mungkin saat program sudah dipakai pengguna.

Python tidak membiarkan kelemahan ini begitu saja. Sejak Python 3.5 tersedia type hints — anotasi tipe opsional yang bisa diperiksa alat seperti mypy tanpa mengubah perilaku program saat berjalan. Kita akan mempelajarinya pada Section Type Hints dan Static Analysis.

Sepintas tentang Duck Typing #

Dari dynamic typing lahir filosofi khas Python bernama duck typing, dari ungkapan: “jika berjalan seperti bebek dan bersuara seperti bebek, itu bebek”. Artinya: kode Python lebih peduli pada perilaku object daripada identitas tipenya. Operator yang sama bekerja pada tipe apa pun yang mendukung perilaku tersebut:

python
print(10 + 5)
print("10" + "5")

Output yang Dihasilkan:

text
15
105

Operator + menghasilkan 15 untuk angka karena tipe int mengimplementasikan penjumlahan, dan menghasilkan "105" untuk string karena tipe str mengimplementasikan penggabungan. Interpreter Python tidak bertanya “tipe ini apa dulu?”, melainkan langsung memakai perilaku yang tersedia; jika perilakunya tidak ada, barulah TypeError muncul.

Inilah alasan mengapa isinstance() pada Chapter Memeriksa Tipe Data cukup memeriksa keanggotaan tipe secukupnya, dan mengapa fungsi bawaan seperti len() bekerja untuk string, list, maupun dictionary sekaligus. Mekanisme di balik perilaku-perilaku ini — special method seperti __add__ — akan terbuka penuh saat kita belajar class pada Section Object-Oriented Programming.