zoukankan      html  css  js  c++  java
  • python中对象的可变与不可变

    在python中一切皆对象,对象是对数据的抽象。

    所有对象有三个要素:类型、标识、值。类型决定对象可以支持哪些操作;标识指的是对象的内存地址,每个对象有唯一的地址,通过id内建函数可以求出地址;值从字面上看是对象的内容,但是应该理解为对内容的绑定关系。绑定也有说成引用、指向。

    对象一旦被创建,它的类型和标识是不变的,根据值的绑定关系是否可变分为可变对象和不可变对象。

    如果“值”理解为对象的内容容易产生疑惑。如元组是不可变对象,但是如果元组的元素包含可变对象,那元组的内容是可以改变的,因为可变对象的值可以改变。

    那元组为什么说是不可变的对象,理由是元组对已经绑定的可变对象的绑定关系是不可变的,就是元组里的索引一旦绑定了一个对象,就不能修改这个绑定,不能再将这个索引绑定到其它对象,同样就容易理解可变对象了,可变对象值可变指的是内容的绑定关系是可变的,如列表,列表的索引所绑定的对象是可以修改的。

    通过例子来理解:

    tuple_a = (1,[1,2,3])

    list_a = [1,2,3]

    tuple_a是一个包含两个元素的元组,有两个索引即tuple_a[0]和tuple_a[1],这两个索引绑定分别整数对象1和列表对象[1,2,3],不可变指的是不能修改tuple_a[0]和tuple_a[1]这两个的绑定关系,这两个索引只能指向已经绑定的1和[1,2,3]这两个对象,不能对这两个索引进行赋值操作来修改绑定。

    list_a是一个包含三个元素的列表,三个索引绑定了三个整数,这三个绑定是可以任意修改的,任意修改绑定指向其它对象,支持索引的赋值操作。

    今天不自律,明天不自由
  • 相关阅读:
    [转]MVP+WCF+三层结构搭建项目框架
    PowerDesigner之PDM(物理概念模型)
    atoi 和 itoa
    最短作业优先(SJF)
    TCP 三次握手过程详解
    TCP/UDP,SOCKET,HTTP,FTP 简析
    计算机的OSI和TCP/IP网络模型
    理解数据成员指针、函数成员指针
    虚函数底层原理
    C++多态有哪几种方式?
  • 原文地址:https://www.cnblogs.com/buddy916/p/12591669.html
Copyright © 2011-2022 走看看