资讯专栏INFORMATION COLUMN

[Learning Python] Chapter 6: The Dynamic Typing In

lily_wang / 365人阅读

摘要:,可以对对象进行自动地回收。如下,这种情况的发生表示随改变了,应该意识到这个问题。代表引用相同则返回,否则,返回。这个判断会更加严格。的值为的两个量,其必定也是。,和指向了不同的。,由于会存储一些小的和小的以方便重新利用。

1, 在Python中,类型永远跟随object,而非variable。Variable没有类型。

2,在下面的三个式子中,a首先被赋予整形3,再被赋予字符串‘spam’,后再被赋予float型数值1.23. 这在Python中是可行的,而在C语言中不行。

>>> a = 3 # It"s an integer
>>> a = "spam" # Now it"s a string
>>> a = 1.23 # Now it"s a floating point

3,在Python中,variable和object的这种关系称为引用(reference):

每一次a被赋予一个新的值,这个箭头就被指向新的object。

4,每一个object除了有足够的内存空间来存储它的值,还有2个标题字段(header fields):
A,type designator用来标记这个object的类型
B,reference counter 用来确定是否可以回收这个object了。
比如,3这个object内的type designator就告诉Python,其类型是integer。

5,Python可以对对象进行自动地回收。这就是reference counter做的事情。如果指向这个object的reference个数为零,这个object就被立刻回收。所以,程序员无需自己对其回收。如上面的a,当其被从3,指向字符串‘spam’的时候,如果3没有在被其他的variable所引用,3这个object将立即被Python回收。既其reference counter 从 1 降至0.

6,share reference: 如下的代码表示object 3被a和b同时引用了:

如果a被重新赋值为‘spam’,则表示a的引用变成新的object,即‘spam’,而b仍然指向3这个object。这告诉我们,b不是指向a,而是指向object。所有的variable都不是指向variable,而是指向object。

7,share reference and in-place changes.
何为in-place changes ? in-place changes 指的是针对mutable类型的type,是可以对其修改内容的,包括:dictionary、list、set。改变这种type的某个位,并不是构造一个新的object,而是修改原先的object。如下,这种情况的发生表示L2随L1改变了,programmer应该意识到这个问题。

>>> L1 = [2, 3, 4] # A mutable object
>>> L2 = L1 # Make a reference to the same object
>>> L1[0] = 24 # An in-place change
>>> L1 # L1 is different
[24, 3, 4]
>>> L2 # But so is L2!
[24, 3, 4]

8,如果不想影响L2,则应该将本来的L1复制一份,在让L2指向这个复制的object。
对于list,可以用切片的方法复制以个新的list。

>>> L1 = [2, 3, 4]
>>> L2 = L1[:] # Make a copy of L1 (or list(L1), copy.copy(L1), etc.)
>>> L1[0] = 24
>>> L1
[24, 3, 4]
>>> L2 # L2 is not changed
[2, 3, 4]

而set、dictionary没有切片的方法,则需要用copy的方法,当然,copy同样适用于list:

import copy
X = copy.copy(Y) # Make top-level "shallow" copy of any object Y
X = copy.deepcopy(Y) # Make deep copy of any object Y: copy all nested parts

9, == 代表值相同则返回True,否则,返回False。
is代表引用相同则返回True,否则,返回Flase。这个判断会更加严格。is的值为True的两个量,其==必定也是True。

>>> L = [1, 2, 3]
>>> M = [1, 2, 3] # M and L reference different objects
>>> L == M # Same values
True
>>> L is M # Different objects , L 和M 指向了不同的object。
False 

10,由于Python会存储一些小的integer和小的string以方便重新利用。故有些时候,本该被回收的object(小的integer或者小的string)并没有被及时地回收,而是仍然存储在内存里。

>>> X = 42
>>> Y = 42 # Should be two different objects
>>> X == Y
True
>>> X is Y # Same object anyhow: caching at work!
True

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38301.html

相关文章

  • Learning Python, 5th Edition 读书笔记 1

    How Python Runs Programs Process: source code -> compiled byte code -> PVM (Python Virtual Machine) runs byte codePerformance loss: compilation + extra work in running virtual machineImplementation va...

    YPHP 评论0 收藏0
  • [Learning Python] Chapter 7 String Fundamentals

    摘要:此时不要在这里面的右边加入,否则会被当做。,这个式子可以将二进制数,转换为十进制的。需要注意的是,需要加上,表示。下面,表示括号内的第一个参数,表示第二个参数。 1, 字符串的连接concatenate有两种方式:A:直接写在一起: >>> title = Meaning of Life # Implicit concatenation >>> title Meaning of L...

    baoxl 评论0 收藏0
  • [Learning Python] Chapter 8 Lists and Dictionaries

    摘要:,如何一个方法一使用方法二使用方法方法三使用方法,按升序或降序排列表示升序表示降序和会返回。而仅能删除一个。使用方法可以避免这样的错误导致程序出现。,在中,的方法返回的不再是。不过可以使用强迫它们组成一个。 Chapter 8 Lists and Dictionaries1, list的concatenation 和 repetition 操作: >>> [1, 2, 3] + [4,...

    gekylin 评论0 收藏0
  • [Learning Python] Chapter 5 Numeric Types

    摘要:,可以用十进制十六进制八进制二进制来表示。由实数虚数组成。,在中,八进制可以以开头,但是在中,不能以开头,一定要以或者开头,位的运算表示位向左移动表示位向右移动表示或运算表示运算表示异或运算两者不同为,相同为可以用方法计算二进制数有多少位。 1, 在Python 2.x 中。Python的integer,有两种类型,normal和long。Normal通常是32位的。Long表示无限精...

    yuxue 评论0 收藏0
  • [Learning Python] Chapter 4. Introducing Python Ob

    摘要:可以连接,可以重复可以将两个连接在一起可以重复任意次数如中,号作用于表示连接,而作用于数字表示加法,操作符的作用会根据其作用的对象而有所适应。中的对象被分类为和。针对的核心类型,数字字符串和都是的。 1, >>> len(str(3)) 结果是1,len不能对数字求值,需要先将数字转换为str 2, math模块中,有许多工具可以用来计算数学问题。使用math模块,先导入math: i...

    CHENGKANG 评论0 收藏0

发表评论

0条评论

lily_wang

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<