以Mark Lutz著的《Python学习手册》为教程,每天花1个小时左右时间学习,争取两周完成。 --- 写在前面的话
2013-7-17 19:00 学习笔记
1,在Python中,变量总是一个指向对象的指针,而不是可改变的内存区域的标签:给一变量赋值一个新的值,并不是替换了原始的对象,而是让这个变量去引用完全不同的一个对象。例如:
a = 3;
b = a;
a += 2;
print a,b
结果为:
5 3
但是对于列表、字典以及通过class定义的对象,则存在共享引用的情况。例如:
L1 = [1,2,3]
L2 = L1
L1[0] = 24
print L1,L2
结果为:
[24, 2, 3] [24, 2, 3]
如果需要引用不同的对象,则需要拷贝对象。这可以通过分片技术或copy模块来实现。例如:
L1 = [1,2,3]
L2 = L1[:] #slice
L1[0] = 24
print L1,L2
结果为:
[24, 2, 3] [1, 2, 3]
或
import copy
L1 = [1,2,3]
L2 = copy.copy(L1)
L3 = copy.deepcopy(L1) # copy all nested parts
L1[0] = 24
print L1,L2,L3
结果为:
[24, 2, 3] [1, 2, 3] [1, 2, 3]
2,==可以判断值是否相等,而is则可以判断两个变量是否指向了同一个对象。例如:
M = [1,2,3]
L = M
print M==L,M is L
X = [1,2,3]
Y = [1,2,3]
print X==Y,X is Y
结果为:
True True
True False
但是要注意,对于小的整数和小的字符串,Python有缓存机制,不用的时候不会立即回收。例如:
M = 128
L = 128
print M==L,M is L
X = 'hello world'
Y = 'hello world'
print X==Y,X is Y
结果为:
True True
True True