Gregory Piñero wrote: > Hey guys, would someone mind giving me a quick rundown of how > references work in Python when passing arguments into functions? The > code below should highlight my specific confusion:
All arguments are passed by reference, but in Python equality rebinds the name. > > <code> > > bool1=True > lst1=[1,2,3] > > def func1(arg1): arg1.append(4) In C++, pretending it had dynamic typing, this would be equivalent to: void func1( * arg1){ arg1->append(4); } > > def func2(arg1): arg1=False void func2 ( * arg2) { arg2 = &(False); > Why does my list variable get changed for the rest of the program, but > my boolean variable doesn't. What am I not understanding? In Python, "x = y" has a very definite meaning of "y is assigned to the name of x." This change does not affect whatever was in x to start with, and it certainly would not affect anything else which holds a reference to the object formerly known as x. In contrast, calling a function which mutates the object (like .append on lists, or assignment by lst[index]=something) actually changes the object itself, which is of course reflected by all other names that hold a reference to the object. -- http://mail.python.org/mailman/listinfo/python-list