python函数式传参
a =1 def fun(a): a = 2 fun(a) print a #1 a = [] def fun(a): a.append(1) fun(a) print(a) #1
在此例中为什么调用a为数字的时候,用函数对a进行操作,a的值不变,a为列表的时候调用函数对传入参数进行操作,发现函数的值发生变化。这是因为在python中变量都可以理解为内存中对象的引用,对象分为“可变对象”和“不可变对象”。strings,tuples,numbers是不可更改对象,而list,dict则是可更改对象。当对象的引用传递给参数的时候,函数自动复制一份引用,函数中的这份引用和外面 的变量引用之间没有任何关系。
第一个例子里函数把引用指向了一个不可变对象,当函数返回的时候,外面的引用 不发生变化,第二个例子中,函数的引用指向的是可变对象,这种情况下就像定义了一个指针,返回后更改了内存的属性。
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号