我爱Python之对象的可变性

可变性:指一个对象的值是否可改变。

所有Python对象都有三个属性:类型、标识符、值,三个属性几乎总是只读的,在对象的生命周期内它们是不可变的。唯一例外的是对象的值,如果值可变则是可变对象,值不可变就是不可变对象。

不可变对象传值,可变对象传引用

简单的类型或者“标量”类型,包括整数和其他数字类型,str和Unicode字符串类型以及元组是不可变的。剩下字典、列表、类、类的实类等都是可变的

>>> mylist1 = [1, ‘a‘, [‘foo‘, ‘bar‘]]

>>> mylist2 = list(mylist1)

>>> mylist2[0] = 2

>>> mylist2[2][0] = ‘biz‘

>>> print mylist1

[1, ‘a‘, [‘biz‘, ‘bar‘]]

>>> print mylist2

[2, ‘a‘, [‘biz‘, ‘bar‘]]

前两个对象整数和字符串是不可变的(传值),但第三个对象是可变的列表(传引用),所以mylist1也改变了

时间: 2024-10-01 01:00:30

我爱Python之对象的可变性的相关文章

Python之对象的属性

# -*- coding: utf-8 -*- #python 27 #xiaodeng #Python之对象的属性 #http://python.jobbole.com/82622/ #对象的属性 class bird(): feather = True class chicken(bird): fly = False def __init__(self,age): self.age = age summer = chicken(2) print(bird.__dict__) print(ch

python函数对象

适用于python 2.x版本 1. lambda函数 1 func = lambda x, y : x + y 2 print func(2, 4) lambda生成一个函数对象,参数是x,y, 返回x+y. 2. map() 函数 1 rtn = map((lambda x: x*3), [1, 2, 3, 4, 5, 6]) 2 print rtn map是python内置函数,第一个参数是函数,第二个参数是一个序列.第一个函数作用与序列的每一个元素,并将结果放在序列rtn里. 3. re

Python的对象操作(一)

python支持对象和函数   1. python是解释型语言,逐行运行 2. 对象调用 例子:删除文件的一个例子 2.1 先定义一个类 class MyApp: 2.2 import 引用要用到的模块 __author__ = 'Bright' import shutil import os """ * 对象操作实战 * 上演出多个文件 """ class MyApp: def __init__(self, root): self.root =

python string 对象

上一篇的整数对象是定长数据,即C中的long型整数. 但是python中还大量存在着不定长的数据类型.如字符串对象 和整数对象一样,字符串对象的组成如下: PyStringObject定义如下: Ob_size就是实际使用的内存大小,在注释中:ob_sval contains space for 'ob_size+1' elements. 因为末尾需要额外包含一个0 byte来保证字符串的结束. 这个学过C语言的应该都不会陌生的.但是这只是一个字符数组,怎么能包含N个字符呢? 显然这只能是一个字

python 获取对象信息

当我们拿到一个对象的引用时,如何知道这个对象是什么类型.有哪些方法呢? 使用type() 首先,我们来判断对象类型,使用type()函数: 基本类型都可以用type()判断: >>> type(123) <type 'int'> >>> type('str') <type 'str'> >>> type(None) <type 'NoneType'> 如果一个变量指向函数或者类,也可以用type()判断: >&

【python】对象和面向对象

类的定义 python支持多重继承,在类名后面的小括号中,可以列出多个类名,以逗号分割. __init__方法在类的实例创建后被立即调用,注意与c++中构造函数不一样,因为对象在调用__init__时已经被构造出来,__init__方法不返回值,__init__方法不是必须要定义的. 每个类方法的第一个参数,包括__init__,都是指向类的当前实例的引用.按照习惯这个参数被称为self.在__init__方法中,self指向新创建的对象,在其他的类方法中,它指向方法被调用的类的实例.尽管当定义

python的对象的属性(即对象的成员)是动态的

1 python的对象的成员叫attribute 2 python的类的成员是可以动态创建的 因此,在用的时候也提供了三个内建的接口来对类的成员进行操作 2.1 getattr() 2.2 hasattr() 2.3 setattr() 这三者通过attribute的name对应起来,name是一个字符串. 当setattr()的attribute不存在时,就为该对象新建该attribute. 这些对象的属性是放在[对象.___dict__]字典中的,用[对象.___dict__[attr_na

Python 不同对象比较大小

万恶的源泉: Fireboo的疑问(当然 lambda 本身写的就有问题): >>> filter( lambda x: x > 2, [ 1, [ 1, 2, 3 ], 2, 3 ] ) [[1, 2, 3], 3] ?: >>> 1 < [ 1 ] True >>> int < list True >>> dict < int < list True >>> int < map

python实现对象&#39;+&#39;操作符

python对象实现__add__,__radd__方法即可实现'+'操作符 demo: 1 # coding=utf-8 2 3 class Person(object): 4 def __init__(self, age): 5 self.age = age 6 def __add__(self, other): 7 return self.age + other 8 def __radd__(self, other): 9 return self.age + other 10 11 pri