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

    今天不自律,明天不自由
  • 相关阅读:
    我用柔软打败你
    【记录】ASP.NET URL 特殊字符
    再次记录 Visual Studio 2015 CTP 5 的一个坑
    【记录】ASP.NET MVC View 移动版浏览的奇怪问题
    升级 Visual Studio 2015 CTP 5 的坑、坑、坑
    OWIN 中 K Commands 与 OwinHost.exe 相等吗?
    OWIN 中 K Commands(OwinHost.exe)与 Microsoft.AspNet.Hosting 的角色问题
    深入理解 OWIN 中的 Host 和 Server
    【续集】在 IIS 中部署 ASP.NET 5 应用程序遭遇的问题
    delete
  • 原文地址:https://www.cnblogs.com/buddy916/p/12591669.html
Copyright © 2011-2022 走看看