Python参数传递采用的肯定是“传对象引用”的方式。这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象--相当于通过“传值'来传递对象。
列表,字典等参数: 传引用,函数中对这些对象做修改,原来的值也会被修改。
int,string, tuple: 传引用,但是结果像传值,函数的修改不会反映到原变量。
#!/usr/bin/python # -*- coding: utf-8 -*- a = {i: i*i for i in range(10)} b = 10 c = "hello world!"def pop_list(x):for i in range(len(x)):x.pop(i)print xdef decrease(y):y = y-2print ydef slice(string):string = string[:2]print stringif __name__ == "__main__":print "-" * 10 + "original a" + "-" * 10print aprint "-"*10 + "params in function" + "-"*10pop_list(a)print "-" * 10 + "a" + "-" * 10print aprint "-" * 10 + "original b" + "-" * 10print bprint "-" * 10 + "params in function" + "-" * 10decrease(b)print "-" * 10 + "b" + "-" * 10print bprint "-" * 10 + " original c" + "-" * 10print cprint "-" * 10 + "params in function" + "-" * 10slice(c)print "-" * 10 + "c" + "-" * 10print c
output:
----------original a----------
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
----------params in function----------
{}
----------a----------
{}
----------original b----------
10
----------params in function----------
8
----------b----------
10
---------- original c----------
hello world!
----------params in function----------
he
----------c----------
hello world!
ref: http://www.cnblogs.com/loleina/p/5276918.html