当list用于函数的参数时 Q.关于python 3中的内存堆栈和堆

问题描述

def first(a):

cnt=0
if a[0]==1:
    a[0]=0
else:
    a[0]=1

for i in range(1,len(a)):
    if a[i] != a[i - 1]:
        continue
    else:
        if a[i - 1] == True:
            a[i] = 0
        else:
            a[i] = 1
        cnt += 1
return cnt

def second(a):
    cnt=0
    for i in range(1,len(a)):
        if a[i] != a[i - 1]:
            continue
        else:
            if a[i - 1] == True:
                a[i] = 0
            else:
                a[i] = 1
            cnt += 1
    return cnt

def solution(A):

    ans=first(A)
    ans2=second(A)

    return min(ans2,ans)

    print(solution([1,1,1]))

嗨,我做了3个函数,我认为列表“ A”将存储在堆栈存储器中并复制函数“ first”的参数

所以我认为在“第一个功能“ A”运行后,A不会被更改

但“第一次”运行后A发生了变化

(这意味着[1,1]更改为[1,1],因此当运行“ second”时,列表“ A”被置为[1 ,0,1] 不是原始列表“ A”([1,1]))

为什么会这样?

与此不同吗?

def swap(a,b):
    tmp=a
    a=b
    b=tmp


def solution(a,b):
    swap(a,b)
    print(a,b)

solution(1,2) # answer is 1,2

在这种情况下,a,b不变

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)