zoukankan      html  css  js  c++  java
  • python——可变对象和不可变对象

     

    可变对象和不可变对象

    1.list是可变对象,而字符串(str)、整数、tuple等是不可变对象

    2.对于可变对象l,比如 list,对 list 进行操作,list内部的内容是变化的

    如:

    1 >>> a=['c','b','a']
    2 >>> a.sort()
    3 >>> a
    4 ['a', 'b', 'c']

    3.对于不可变对象,比如 str,对 str 进行操作:

    1 >>> a='abc'
    2 >>> a.replace('a','A')  #将a替换成A,返回替换后的变量
    3 'Abc'
    4 >>> a  #但是变量a本身还是不变的
    5 'abc'

    变量a不变的原因:

    当调用 a.replace()函数时,会创建一个新的对象,即变量b,将改变后的新字符串赋值给变量b,而变量a里面的内容不变

    如下代码:

    1 >>> a='abc'
    2 >>> b=a.replace('a','A')
    3 >>> b
    4 'Abc'
    5 >>> a
    6 'abc'

    要始终牢记的是,a是变量,而'abc'才是字符串对象!有些时候,我们经常说,对象a的内容是'abc',但其实是指,a本身是一个变量,它指向的对象的内容才是'abc'

    当我们调用a.replace('a','A')时,实际上调用方法replace是作用在字符串对象'abc'上的,而这个方法虽然名字叫replace,但却没有改变字符串'abc'的内容。相反,replace方法创建了一个新字符串'Abc'并返回,如果我们用变量b指向该新字符串,就容易理解了,变量a仍指向原有的字符串'abc',但变量b却指向新字符串'Abc'了

    变量a→‘abc’

    变量b→‘Abc’

     

    所以,对于不可变对象来说,调用对象自身的任意方法,都不会改变该对象的自身内容,这些方法会创建新的对象,并将返回结果指向这个新的对象中。

  • 相关阅读:
    JDK8 Optional类使用
    Kafka RocketMQ
    Dubbo,ElasticSearch,JVM,多线程/高并发,消息中间件 常问问题
    Redis
    java jvm 虚拟机
    25 岁做什么,可在 5 年后受益匪浅?
    设计模式
    并发与并行的理解
    多线程学习
    FireFox 如何在当前页面打开书签
  • 原文地址:https://www.cnblogs.com/canneddream/p/14158208.html
Copyright © 2011-2022 走看看