Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapakah Menukar Pembolehubah Salin Mempengaruhi Pembolehubah Asal dalam Python?

Mengapakah Menukar Pembolehubah Salin Mempengaruhi Pembolehubah Asal dalam Python?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-14 19:11:13682semak imbas

Why Does Changing a Copy Variable Affect the Original Variable in Python?

Python: Mengapa Menukar Pembolehubah Salinan Mempengaruhi Pembolehubah Asal

Dalam Python, anda mungkin menghadapi gelagat pelik apabila pengubahsuaian dibuat pada salinan pembolehubah kelihatan mengubah pembolehubah asal juga. Ini berlaku kerana pembolehubah Python menyimpan rujukan dan bukannya nilai sebenar.

Untuk memahami perkara ini, pertimbangkan situasi yang diterangkan:

org_list = ['y', 'c', 'gdp', 'cap']
copy_list = org_list       # Pass reference to org_list
copy_list.append('hum')

print(copy_list)           # ['y', 'c', 'gdp', 'cap', 'hum']
print(org_list)            # ['y', 'c', 'gdp', 'cap', 'hum']

Apabila anda menetapkan copy_list kepada org_list, anda tidak membuat senarai baharu tetapi sebaliknya mewujudkan rujukan kepada objek senarai yang sama dalam ingatan. Oleh itu, sebarang perubahan pada sama ada copy_list atau org_list secara langsung mempengaruhi kedua-dua pembolehubah.

Untuk mencipta salinan yang benar-benar bebas, anda perlu menghantar salinan data sebenar, bukannya rujukan. Ini boleh dilakukan dengan menggunakan operator tugasan hirisan:

copy_list = org_list[:]    # Create a deep copy by slicing

Dengan menghiris senarai asal, anda mencipta objek senarai baharu dengan salinan datanya sendiri. Sebarang pengubahsuaian yang dibuat pada copy_list tidak akan menjejaskan org_list, dan begitu juga sebaliknya.

Atas ialah kandungan terperinci Mengapakah Menukar Pembolehubah Salin Mempengaruhi Pembolehubah Asal dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn