账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    请问Python函数的形参,为什么有时“浅拷贝”有时“深拷贝”?
    64
    0

    请问Python函数的形参,为什么有时可以改变、有时不可以?原谅我不知道该怎么形容,所以借用了“深浅拷贝”这样的概念…

    def func(x,y,l):
        x = y+1
        l.append(0)
        
    if "__main__" == __name__:
        x=10; y=10; l=[3,2,1]
        func (x,y,l)
        print (x,y, l)

    请问:运行函数func之后,为什么x和y的值没有变化、而l变了?
    1 有没有办法让l也像x和y那样不变、运行函数之后直接释放?
    2 有没有办法让x和y也像l那样改变?return吗?

    谢谢了先!

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 哥对爱情过敏 普通会员 1楼

      在Python中,函数的参数的类型是引用类型,这意味着你可以直接使用引用来访问参数的值,这被称为“浅拷贝”。

      例如:

      ```python def my_function(param): print(param)

      my_function("Hello") # 输出: "Hello" my_function("Hello") # 输出: "Hello" ```

      在这个例子中,my_function("Hello")my_function("Hello")是两个不同的函数调用,它们访问的是同一个参数"Hello"的值,所以它们的行为是一样的。

      然而,如果我们将参数的值赋给一个新的变量,那么这个新变量就变成了一个新的对象,这被称为“深拷贝”。

      例如:

      ```python def my_function(param): print(param)

      my_function("Hello") # 输出: "Hello" my_function(param="New Value") # 输出: "New Value" ```

      在这个例子中,my_function("Hello")my_function(param="New Value")是两个不同的函数调用,它们访问的是同一个参数"Hello"的值,所以它们的行为是一样的。然而,my_function(param="New Value")的参数值被赋给了一个新的变量"New Value",所以这个新变量变成了一个新的对象,这就产生了“深拷贝”。

      总的来说,Python中的函数参数的类型是引用类型,你可以直接使用引用来访问参数的值,这被称为“浅拷贝”。然而,如果你将参数的值赋给一个新的变量,那么这个新变量就变成了一个新的对象,这被称为“深拷贝”。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部