python中not加变量是_函数更改列表值而不是Python中的变量值

参见英文答案 > Why can a function modify some arguments as perceived by the caller, but not others?????????????????????????????????????10个

我们来看一个简单的代码:

y = [1,2,3]

def plusOne(y):

for x in range(len(y)):

y[x] += 1

return y

print plusOne(y), y

a = 2

def plusOne2(a):

a += 1

return a

print plusOne2(a), a

‘y’的值发生变化但值’a’保持不变.我已经知道这是因为一个是可变的而另一个不是.但是如何更改代码以使函数不更改列表?

例如,要做类似的事情(为了简单起见,使用伪代码):

a = [1,2,3,...,n]

function doSomething(x):

do stuff with x

return x

b = doSomething(a)

if someOperation(a) > someOperation(b):

do stuff

编辑:抱歉,我在嵌套列表上有另一个问题.看到这段代码:

def change(y):

yN = y[:]

for i in range(len(yN)):

if yN[i][0] == 1:

yN[i][0] = 0

else:

yN[i][0] = 1

return yN

data1 = [[1],[1],[0],[0]]

data2 = change(data1)

在这里它不起作用.为什么?再说一遍:如何避免这个问题?我理解为什么它不起作用:yN = y [:]将y的值复制到yN,但值也是列表,因此对于列表中的每个列表,操作必须加倍.如何使用嵌套列表执行此操作?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值