python无法通过by value或者 by reference 来定义

在python中, parameter sent to function 使用的全部是 by object。
也就是,这无法通过by value或者 by reference 来定义。这是python的独到之处。
如果object本身是immutable的,例如一个不是太长的整数,那么你可以看作是传值。因为每一次对这个object赋值,都会创建一个新的object,如下:
a=10
def function1(value):
value=20
print(value)

function1(a)

print(a)
结果是
20
10
虽然传过去的是a这个object,但当function1对a赋值的时候,其实他并没有改变a,而是创建了一个新的object,这个object叫做value了。global当中的a并没有变。
如果object本身是mutable,例如一个list,因为每一次对这个object赋值,都会改变这个object本身。那么就可以看作是传reference。如下:
a=[10,11,12,13]

def function1(value):
value[1:3]=[]
print(value)

function1(a)

print(a)
结果是
[10,13]
[10,13]

list.reverse 是一个in-place method。也就是说,reverse是在原来object上操作,而不会创造一个新的object。上面t=s,按照python传object的标准,那么就是t=s 是同一个object。.reverse作用在这个object上,那么t,s都变了。他们只是名字而已。
而slicing [::] 这个,会创造一个新的object。所以。自然啦。
最好的办法是deep copy.

http://www.45zq.cn/portal/article/index/id/165.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值