在python中,对象在调用函数时,是否改变原有值得问题中,并无传值或引用的概念,而是要看实参是可变对象还是不可变对象。
1.对于不可变对象(如字符串),调用函数进行运算后,会生成一个新的对象(id()不同),实参原始对象则不会被改变
2.对于可变对象(如列表),调用函数进行运算后,仍对原始对象进行操作(id()相同),因此,实参原始对象会被改变是
3.可变对象包括:列表、字典、set、自定义类,调用函数后会改变实参原始对象的值
4.不可变对象包括:字符串,整型,浮点型,元组、frozenset,range,调用函数后不会实参改变原始对象的值
def f_tring(n):
n=n+"s"
print("函数内,对n操作后得id(n)",id(n))
return n
def f_list(list):
print("函数内,对n操作后得id(list)",id(list))
return list.append('end')
if __name__=="__main__":
print("----------测试不可变对象:string类型数据")
n="a"
print('调用函数之前,n=',n)
print("调用函数之前得id(n)",id(n))
print('调用函数f_tring(n):',f_tring(n))