关闭

python中是按值传递参数还是按引用传递参数

标签: python是按值传递参数还是按引用传递参数
2538人阅读 评论(0) 收藏 举报

在学习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中,函数传参,还是传入的引用,而不是值。。

对于不可以改变和可以改变的数据类型,在函数调用的时候,会有不同的处理方式。。


======

知识总结尚浅,需要更多的学习,以后继续更新。。。

0
1

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:290685次
    • 积分:6134
    • 等级:
    • 排名:第4041名
    • 原创:320篇
    • 转载:75篇
    • 译文:1篇
    • 评论:28条