Kod pertama:
# -*- coding:gb2312 -*-
a = [100]
def test(num):
num += num #第一段代码
print(num)
test(a)
print(a)
Hasil pelaksanaan:
Kod kedua:
# -*- coding:gb2312 -*-
a = [100]
def test(num):
num = num + num #这个地方改了一下
print(num)
test(a)
print(a)
Hasil pelaksanaan:
Soalan saya:
num += num tidak sepatutnya bersamaan langsung dengan mun = num+num Mengapakah keputusan yang dikira berbeza? Apa yang sedang berlaku
Boleh cuba buat macam ni,
Alamat memori yang diperuntukkan kepada pembolehubah boleh diperolehi melalui fungsi id(). Melalui eksperimen, didapati bahawa alamat pembolehubah menggunakan
+
telah berubah, iaitu apa yang anda katakan num+=num dan num=num+numbukan bersamaan.Namun, apabila anda melakukan operasi seksi berikut, anda akan mendapati diri anda ditampar di muka
Alamat yang diberikan nampaknya berubah sepanjang masa.
Sebabnya ialah struktur data dalam Python dibahagikan kepada boleh berubah dan tidak boleh diubah.
Untuk jenis pembolehubah, = dan += jelas berbeza, seperti yang ditunjukkan dalam senarai di atas:
+ mewakili operasi sambungan, += mewakili penambahan
Untuk jenis tidak berubah, = dan += adalah operasi yang sama, seperti tupel di atas
Intipati jenis pembolehubah dan jenis tidak berubah terletak pada sama ada ruang memori berubah~
Perkara pertama yang perlu diperhatikan ialah perbezaannya
Anda dapat melihat bahawa kaedah yang dipanggil adalah berbeza, ia adalah __add__, __iadd__
Operator penambahan akan mengira objek baharu untuk diberikan kepada num
Operator penugasan tambahan mengubah suai rujukan asal
Rujukan di sini: https://stackoverflow.com/que...
Ingat bahawa hujah diluluskan oleh tugasan dalam Python
Dalam Python, tugasan digunakan untuk menghantar parameter, bukan rujukan, jadi apabila anda menghantar a kepada fungsi, anda lulus nilai a, bukan a sendiri. Jika anda ingin menukar sendiri, anda perlu menggunakan pulangan untuk menghantar nilai semula
Hasil:
Dalam ular sawa, a=a+b perlu mencipta objek baharu dahulu dan biarkan pembolehubah a merujuk kepada objek ini a+=b ialah menukar nilai objek yang dirujuk oleh a menjadi nilai a+b.