Itu terjadi karena kompilasi dengan Python dilakukan dengan mengeksekusi kode deskriptif.
Kalau ada yang bilang
def f(x = {}):
....
akan sangat jelas bahwa Anda menginginkan array baru setiap kali.
Tetapi bagaimana jika saya katakan:
list_of_all = {}
def create(stuff, x = list_of_all):
...
Di sini saya kira saya ingin membuat barang ke berbagai daftar, dan memiliki global catch-all ketika saya tidak menentukan daftar.
Tapi bagaimana kompiler akan menebak ini? Jadi mengapa mencoba? Kita bisa mengandalkan apakah ini dinamai atau tidak, dan itu kadang-kadang bisa membantu, tetapi sebenarnya itu hanya dugaan saja. Pada saat yang sama, ada alasan bagus untuk tidak mencoba - konsistensi.
Seperti itu, Python hanya menjalankan kode. Variabel list_of_all sudah diberi objek, sehingga objek dilewatkan dengan referensi ke dalam kode yang default x dengan cara yang sama bahwa panggilan ke fungsi apa pun akan mendapatkan referensi ke objek lokal yang disebutkan di sini.
Jika kita ingin membedakan yang tidak disebutkan namanya dari case yang disebutkan, itu akan melibatkan kode pada kompilasi yang menjalankan tugas dengan cara yang sangat berbeda dari yang dijalankan saat run-time. Jadi kami tidak membuat kasus khusus.