python中的可变对象和不可变对象

简介:

知识点:python中,万物皆对象。

知识点:python中,万物皆对象。  

 python中不存在所谓的传值调用,一切传递的都是对象的引用,也可以认为是传址。

一、可变对象和不可变对象

Python在heap中分配的对象分成两类:可变对象和不可变对象。所谓可变对象是指,对象的内容可变,而不可变对象是指对象内容不可变。

不可变(immutable):int、字符串(string)、float、(数值型number)、元组(tuple)

可变(mutable):字典型(dictionary)、列表型(list)

不可变类型特点:

  看下面的例子(例1)


[python] view plaincopyprint?在CODE上查看代码片派生到我的代码片

  1. i = 73  

  2. i += 2  


从上图可知,不可变对象的特征没有变,变的只是创建了新对象,改变了变量的对象引用。

  看一个例子(例2)

>>>x = 1
>>>y = 1
>>>x = 1
>>> x is y
True>>>y is z
True

  如上所示,因为整数为不可变,x,y,z在内存中均指向一个值为1的内存地址,也就是说,x,y,z均指向的是同一个地址,值得注意的是,整形来说,目前仅支持(-1,100)。

  总结一下,不可变对象的优缺点。

    优点是,这样可以减少重复的值对内存空间的占用

    缺点呢,如例1所示,我要修改这个变量绑定的值,如果内存中没用存在该值的内存块,那么必须重新开辟一块内存,把新地址与变量名绑定。而不是修改变量原来指向的内存块的值,这回给执行效率带来一定的降低。

  下面看一个可变对象的例子(例3)

m=[5,9]
m+=[6]

二、函数参数:

Python函数参数对于可变对象,函数内对参数的改变会影响到原始对象;对于不可变对象,函数内对参数的改变不会影响到原始参数。原因在于:

1、可变对象,参数改变的是可变对象,其内容可以被修改。

2、不可变对象,改变的是函数内变量的指向对象。



本文转自 shouhou2581314 51CTO博客,原文链接:http://blog.51cto.com/thedream/1720828,如需转载请自行联系原作者

相关文章
|
1月前
|
存储 安全 UED
一文让你读懂Python中的Response对象
一文让你读懂Python中的Response对象
41 0
|
9天前
|
Python
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)
51 0
|
10天前
|
Python
python学习12-类对象和实例对象
python学习12-类对象和实例对象
|
1月前
|
Python
Python类与对象:深入解析与应用
本文介绍了Python中的核心概念——类和对象,以及它们在面向对象编程中的应用。类是用户定义的类型,描述具有相同属性和行为的对象集合;对象是类的实例,具备类的属性和方法。文章通过示例讲解了如何定义类、创建及使用对象,包括`__init__`方法、属性访问和方法调用。此外,还阐述了类的继承,允许子类继承父类的属性和方法并进行扩展。掌握这些概念有助于提升Python编程的效率和灵活性。
|
1月前
|
索引 Python
Python快速入门:Python对象
Python快速入门:Python对象
|
1月前
|
存储 设计模式 Python
Python中的类(Class)和对象(Object)
Python中的类(Class)和对象(Object)
29 0
|
1月前
|
Python
Python中如何判断两个对象的内存地址是否一致?
Python中如何判断两个对象的内存地址是否一致?
17 0
|
1月前
|
存储 JSON JavaScript
Python如何解析json对象?
Python如何解析json对象?
25 1
|
1月前
|
程序员 Python
【python基础知识】python怎么查看对象的属性
【python基础知识】python怎么查看对象的属性
19 0
C4.
|
1月前
|
Python
Python类与对象
Python类与对象
C4.
9 1

热门文章

最新文章