python核心编程第四章 python对象
4–1. Python 对象。与所有 Python 对象有关的三个属性是什么?请简单的描述一下。 身份,类型和值。
4–2. 类型。不可更改(immutable)指的是什么?Python 的哪些类型是可更改的 (mutable),哪些不是?
如果对象支持更新操作,那么它的值就可以改变,否则它的值也是只读的。对象的值是否 可以更改被称为对象的可改变性(mutability)
数字 Scalar 不可更改 直接访问
字符串 Scalar 不可更改 顺序访问
列表 Container 可更改 顺序访问
元组 Container 不可更改 顺序访问
字典 Container 可更改 映射访问
不可更改指的是一旦修改,原有的变量会回收,重新分配ID,然后赋新值
而可更改,赋新值后,id并不发生改变。
4–3. 类型。哪些 Python 类型是按照顺序访问的,它们和映射类型的不同是什么?
对非容器类型可以直接访问。所有的数值类型都归到这一类。
序列类型是指容器内的元素按从 0 开始的索引顺序访问。一次可以访问一个元素或多个元 素, 也就是大家所了解的切片(slice)。 字符串, 列表和元组都归到这一类
映射类型类似序列的索引属性,不过它的索引并不使用顺序的数字偏移量取值, 它的元素 无序存放, 通过一个唯一的 key 来访问, 这就是映射类型, 它容纳的是哈希键-值对的集合。
直接访问 数字
顺序访问 字符串、列表、元组
映射访问 字典
基本数据类型5/6/7整数,列表,元组,字典
4–4. type()。内建函数 type()做什么?type()返回的对象是什么?
通过调用 type()函数你能够得到特定对象的类型 信息:
4–4. str() 和 repr()。 内建函数 str()与 repr()之间的不同是什么?哪一个等价于反 引号(``)运算符?。
内建函数 str() 和 repr() =反引号运算符(``) 可以方便的以字符串的方式获取对象的 内容、类型、数值属性等信息。str()函数得到的字符串可读性好, 而 repr()函数得到的字符 串通常可以用来重新获得该对象, 通常情况下 obj == eval(repr(obj)) 这个等式是成立的。
repr() 输出对 Python 比较友好, 而 str()的输出对人比较友好
4–6. 对象相等。 您认为 type(a) == type(b)和 type(a) is type(b)之间的不同是什么? 为什么会选择后者?函数 isinstance()与这有什么关系?
print type(a) == type(b)#判断同类型对象是否相等
print type(a) is type(b) #a is b这个表达式等价于id(a) == id(b)
#我们用对象身份的比较来替代对象值的比较。如果对象是不同的,那意
#味着原来的变量一定是不同类型的。(因为每一个类型只有一个类型对象),我们就没有必要去
#检查(值)了。
if isinstance(num, int) 等价于 if type(num) is IntType
4–7. 内建函数 dir()。在第二章的几个练习中,我们用内建函数 dir()做了几个实验, 它接受一个对象,然后给出相应的属性。请对 types 模块做相同的实验。记下您熟悉的类型, 包括您对这些类型的认识,然后记下你还不熟悉的类型。在学习 Python 的过程中,你要逐步将 “不熟悉”的类型变得“熟悉”起来。
Edit By Vheavens
Edit By Vheavens
4–8. 列表和元组。列表和元组的相同点是什么?不同点是什么?
列表 Container 可更改 顺序访问
元组 Container 不可更改 顺序访问
4–9. 练习,给定以下赋值:
a = 10
b = 10
c = 100
d = 100
e = 10.0
f = 10.0 请问下面各表达式的输出是什么?为什么?
a = 1 #第一个数字对象被创建,赋值给a,是第一个对象的引用
b = 1
d = c = 10 #c和d指向相同的对象
内建”,是由于这些类型是 Python 默认就提供的