มันไม่ค่อยได้ผลใน Python Python ส่งผ่านการอ้างอิงไปยังวัตถุ ภายในฟังก์ชันของคุณคุณมีวัตถุ - คุณมีอิสระที่จะกลายพันธุ์วัตถุนั้น (ถ้าเป็นไปได้) อย่างไรก็ตามจำนวนเต็มมีไม่เปลี่ยนรูป วิธีแก้ปัญหาอย่างหนึ่งคือการส่งผ่านจำนวนเต็มในคอนเทนเนอร์ซึ่งสามารถกลายพันธุ์ได้:
def change(x):
x[0] = 3
x = [1]
change(x)
print x
นี่เป็นสิ่งที่น่าเกลียด / เงอะงะ แต่คุณจะไม่ทำอะไรให้ดีขึ้นใน Python เหตุผลก็เพราะว่าใน Python นั้นการกำหนด ( =
) จะใช้วัตถุใด ๆ ก็ตามที่เป็นผลลัพธ์ของทางด้านขวามือและผูกเข้ากับสิ่งที่อยู่ทางซ้ายมือ * (หรือส่งต่อไปยังฟังก์ชันที่เหมาะสม)
เมื่อเข้าใจสิ่งนี้เราจะเห็นว่าเหตุใดจึงไม่มีวิธีเปลี่ยนค่าของวัตถุที่ไม่เปลี่ยนรูปภายในฟังก์ชันคุณไม่สามารถเปลี่ยนแอตทริบิวต์ใด ๆ ได้เนื่องจากไม่เปลี่ยนรูปและคุณไม่สามารถกำหนด "ตัวแปร" ใหม่ได้ มูลค่าเนื่องจากคุณกำลังสร้างวัตถุใหม่ (ซึ่งแตกต่างจากวัตถุเก่า) และตั้งชื่อให้กับวัตถุเก่าในเนมสเปซในเครื่อง
โดยปกติวิธีแก้ปัญหาคือเพียงส่งคืนวัตถุที่คุณต้องการ:
def multiply_by_2(x):
return 2*x
x = 1
x = multiply_by_2(x)
* ในตัวอย่างกรณีแรกข้างต้นจริงได้รับการส่งผ่านไป3
x.__setitem__