• Python对象引用问题总结


    对于对象引用问题,一直是一知半解的状态,现整理以备使用。

    操作不可变对象进行加减运算时,会在内存中创建新的不可变实例,不会影响原来的引用
    >>> c=12
    >>> d=c
    >>> c+=1
    >>> c
    13
    >>> d
    12
    >>>
    >>> a="345a"
    >>> b=a
    >>> a+="dfger"
    >>> a
    '345adfger'
    >>> b
    '345a'
    >>> a=(1,2,3)
    >>> b=a
    >>> b
    (1, 2, 3)
    >>> a='wert'
    >>> a
    'wert'
    >>> b
    (1, 2, 3)
    >>>

    操作可变对象时,内存中的对象会发生变化,影响所有引用,与上一情况的区别在于改变对象时内存中会改变原来的对象还是创建新的对象。
    >>> a=[1,2,3]
    >>> b=a
    >>> a.insert(0, "ertwer")
    >>> a
    ['ertwer', 1, 2, 3]
    >>> b
    ['ertwer', 1, 2, 3]
    >>>
    >>> a={1:2, 'a':'b',"4":5464}
    >>> b=a
    >>> a["678"]="F**K"
    >>> a
    {'a': 'b', 1: 2, '678': 'F**K', '4': 5464}
    >>> b
    {'a': 'b', 1: 2, '678': 'F**K', '4': 5464}
    >>>

    问题的关键还是在于对象是否mutable。相对而言,Python中immutable的对象只有numbers, strings, tuples, frozensets四种,改变其中一个引用,不会影响其他引用;其他list、dict以及这两个的子类对象,都属于mutable,改变任一引用,所有其他引用都会受到影响。

  • 相关阅读:
    groovy脚本语言基础1
    014.Ansible Playbook Role 及调试
    013.Ansible Playbook include
    012.Ansible高级特性
    011.Ansible条件语句
    010.Ansible_palybook 循环语句
    009.Ansible模板管理 Jinja2
    008.Ansible文件管理模块
    007.Ansible变量Fact,魔法变量和lookup生成变量
    006.Ansible自定义变量
  • 原文地址:https://www.cnblogs.com/harelion/p/5545840.html
Copyright © 2020-2023  润新知