zoukankan      html  css  js  c++  java
  • 区分Python中的可变对象和不可变对象

    参考: https://www.cnblogs.com/sun-haiyu/p/7096918.html

    """不过注意函数传参既不是传值也不是传引用,正确的叫法是传对象或者说传对象的引用。
    函数参数在传递的过程中将整个对象传入,对可变对象的修改在函数外部以及内部都可见,调用者和被调用者之间共享这个对象,而对于不可变对象,由于不能真正被修改,因此修改往往是通过生成一个新的对象然后赋值来实现的
    """注意一个例子: a+=b 有时候并不一定是a=a+b
    a1 = [1, 2, 3]
    a2 = a1
    print(id(a1), id(a2))
    # 实际上是a2指向了新的对象,id已经改变。
    # 所以现在a2、a1并不是同一对象的两个引用了,a2变化a1不会改变
    a2 = a2 + [4] # 这个等式中,右边的a2还是和a1的id一样的,一旦赋值成功,a2就指向新的对象
    print(id(1), id(a2))  # 不等,a2的id变化了
    print(a1) # [1, 2, 3]没有变
    
    a1 = [1, 2, 3]
    a2 = a1
    print(id(a1), id(a2))
    a2 += [4]  # 相当于调用了a2.extend([4]),原地改变并没有新的对象产生
    print(id(1), id(a2))  # 相等,a2的id没有变化
    print(a1) 
    

    不同的地方在于a2 += [4],这句相当于调用了a2.extend([4])相当于原地改变,并没有新的对象产生!

    做一枚奔跑的老少年!
  • 相关阅读:
    生物神经网络和人工神经网络浅谈
    卷积神经网络
    DOM进阶之HTMl属性操作(对象属性)
    01 selenium基本使用补充
    01 selenium基本使用
    day4笔记
    03 获取豆瓣电影top250
    02 爬取视频
    day3笔记
    01 requests基本使用
  • 原文地址:https://www.cnblogs.com/xiaoshayu520ly/p/10613219.html
Copyright © 2011-2022 走看看