【问题标题】:Some puzzles about python mutability and immutablity关于python可变性和不变性的一些困惑
【发布时间】:2020-03-31 08:38:14
【问题描述】:

我对以下 3 个代码感到困惑。

1.第一个对我来说很直观,我看到了(B):

(A)

def change (mylist):
    mylist[0] = 33
    mylist[1] = 44
    mylist[2] = 55
    print("inside the function",mylist)

alist = [10,20,30]
change(alist)
print("outside the function",alist)

输出是:

函数内部 [33, 44, 55]

函数外[33,44,55]

2.当我看到(B)时,我很难区分(A)和(B)。

(B)

def change2 (mylist):
    mylist = [33,44,55]
    print("inside the funcion",mylist)

blist = [10,20,30]
change2(blist)
print("outside the funcion",blist)

输出是:

函数内部 [33, 44, 55]

函数外[10,20,30]

3.那么,第三个是(C),我想不通为什么“a”不能改成5。

(C)

def change3(mylist,number):
    mylist[0] = 33
    mylist[1] = 44
    mylist[2] = 55
    number = 5
    print("inside the function",mylist,number)

clist = [10,20,30]
a = 50
change3(clist,a)
print("outside the function",clist,a)

输出是:

函数内部 [33, 44, 55] 5

函数外 [33, 44, 55] 50

我知道他们可能有一些具有可变或不可变概念的东西,但我不知道这三个代码背后的明确概念。有人可以解释一下吗?谢谢。

【问题讨论】:

    标签: python computer-science immutability mutable


    【解决方案1】:

    您需要返回您在函数内部修改的变量,以便它反映在外部值中

    例如:

    def change3(mylist,number):
        mylist[0] = 33
        mylist[1] = 44
        mylist[2] = 55
        number = 5
    
        return mylist, number
    
    clist = [10, 20, 30]
    a = 50
    output = change3(clist, a)
    print("outside the function", output)
    

    对于您提到的所有情况都是如此。由于您尚未返回,因此函数之外的打印内容没有任何变化,并且您获得的是未修改的值。

    【讨论】:

    • 不,其实我并不想改变它,我只是想知道这些代码背后的概念
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    相关资源
    最近更新 更多