• 关于python中对象可变性的理解


    在python中,每个对象都有各自的编号、类型和值。一个对象被创建后,在此对象的生命周期中编号保证是唯一且恒定的。你可以将其理解为该对象在内存中的地址。 'is' 运算符可以比较两个对象的编号是否相同;id() 函数能返回一个代表其编号的整型数。

    下面变量a和变量b指向的对象以及对象[1]在内存中的地址都是不同的。尽管值相同,但它们是三个不同的对象。

    下面的变量a指向的对象虽然值发生了改变,但在内存中的地址并没有变化,还是同一个对象。

    在python中有些对象的值是可以改变的。值可以改变的对象被称为可变对象,如列表和字典;值不可以改变的对象就被称为不可变对象,如数字、字符串和元组。有些对象包含对其他对象的引用,它们被称为容器,如元组、列表和字典等。一个不可变容器对象,如果包含对可变对象的引用,如a=[1,2],元组b=(a,'aa',1),当a的值改变时,如a.append('3'),则元组b的值也会改变,但是该容器(元组b)仍属于不可变对象,因为它所包含的对象集是不会改变的。因此,不可变并不严格等同于值不能改变,上面容器的值指的是所包含对象的具体值而不是所包含对象的编号(内存地址),所以容器的值改变了。但是,当我们谈论一个容器的可变性时,我觉得仅指其直接包含的对象的编号个数是否可变。上面容器(元组b)包含的对象的编号有两个(编号本身是不会变的),不会新增或者减少编号,所以它是不可变的类型。

  • 相关阅读:
    swiper.js 点击链接跳转后再次返回到轮播原位置
    KVO和KVC
    XML与HTML的区别
    iOS UIAppearance使用详解
    文件处理
    IOS 四种数据永久保存的方式
    UIImage图片处理(更改颜色,修改透明度,缩小,合并图片)
    从一个视图控制器切换到另一个视图控制器的几种方式
    NSString的常用方法
    NSURLRequest和NSURLConnection
  • 原文地址:https://www.cnblogs.com/wangyi0419/p/16299870.html
Copyright © 2020-2023  润新知