Python学习笔记(四):动态类型

以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




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值