在学习python函数的时候,遇到了一个非常有趣的问题:
在函数中的参数是如何传递的:是传值?还是传引用?当然,结果我们是知道的,肯定是传引用的。
现在,我们来测一下我们的结论:
=====
修改list,Code:
# 添加了一个string类型的元素添加到末尾
def ChangeList(lis):
lis.append('hello i am the addone')
print lis
return
is = [1, 2, 3]
ChangeList(lis)
print lis
输出结果为:
[1, 2, 3, 'hello i am the addone']
[1,2, 3,'hello i am the addone']
由此可以知道,我们传递参数是传递的引用。。。。。。
那么,看到别人的一个例子,我们就会觉得这里面还是有学问的。。
那么我们来修改一个字符串,试试。
修改string,Code:
<span style="font-size:18px;">#修改字符串
def ChangeString(string):
string = 'i changed as this'
print string
return
string = 'hello world'
ChangeString(string)
print string
</span>
输出结果为:
i changed as this
hello world
@-@ 说好的传引用呢??
为什么在函数外面输出的时候还是hello world的呢?
原来,我们知道在python中, string类型是不能够改变的。。
比如说我们在ChangeString中改变string的话,事实上,我们是没有改变传入的string的,我们仅仅作是事情是,新建一个string对象,然后把它给赋值,而已。
那如何来验证,我们上面的这一句话呢?
修改字符串again,Code:
<span style="font-size:18px;">#修改字符串again,输出string的id
def ChangeString(string):
string = 'i changed as this'
print string, '--- id :', id(string)
return
string = 'hello world'
ChangeString(string)
print string, '--- id :', id(string)
</span>
输出结果为:
i changed as this --- id : 4353556584
hello world --- id : 4353554688
我们可以看到,他们的id是不同的,所以也就是说他们根本不是相同的对象。
也就是说,我们传的还是引用,但是,对于不可改变的数据类型,我们不能修改。。。如果你“修改”了,事实上我们是新建一个对象来进行对待的。。
传入的还是引用,这句话还是不错的。
========
结论:
我们知道,在python中,函数传参,还是传入的引用,而不是值。。
对于不可以改变和可以改变的数据类型,在函数调用的时候,会有不同的处理方式。。
======
知识总结尚浅,需要更多的学习,以后继续更新。。。