python并不刻意区分“按值传递”和“按引用传递”。
在底层,python将值分为不可变对象(比如int,str)和可变对象(比如列表)。所有的变量都是对某个对象的引用,赋值(=)和函数参数传递,都将改变变量所引用的对象。
对于不可变对象,赋值和传参将导致新创建对象,这和C++的引用行为是不同的。此时,赋值和传参是按值传递。
对于可变对象,赋值和传参,和C++引用的行为一致,是真正的按引用传递。
2024-02-17 16:52:37
python并不刻意区分“按值传递”和“按引用传递”。
在底层,python将值分为不可变对象(比如int,str)和可变对象(比如列表)。所有的变量都是对某个对象的引用,赋值(=)和函数参数传递,都将改变变量所引用的对象。
对于不可变对象,赋值和传参将导致新创建对象,这和C++的引用行为是不同的。此时,赋值和传参是按值传递。
对于可变对象,赋值和传参,和C++引用的行为一致,是真正的按引用传递。