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

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

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


======

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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值