Python学习中遇到的问题

1.None和[]的区别

以前以为None就是空,直到看到了下面这段代码

list=[]
if list is None:
    print "list is NULL"
else:
    print "list is %s"  %list

发现输出是list is [],而不是list is NULL。这说明None和[]不等同
去翻了几篇博客后,才知道None表示的是这个对象还没创建,而[]表示的是这个对象创建了,但是还没有值。
“一个盒子不装东西它还是一个盒子([]),你把盒子拆了它就是none了”

2.关于可变对象和不可变对象的理解

果然学习一门语言就要换一种方式来对待它。
看代码:

x = 12323
y = 12323
z = 12323

print id(x)
print id(y)
print id(z)

#输出:
50747600
50747600
50747600
#
print x is y
print y is z

#True
True#

我和伙伴们都惊呆了。。
python里的对象分为可变对象和不可变对象(python万物皆对象)。

  • 不可变对象有:int、字符串(string)、float、(数值型number)、元组(tuple)。
    可变对象有:字典型(dictionary)、列表型(list)。

    我对不可变对象的理解就是给这个对象赋值之后,对象的值就不可以更改了,如果想改变对象的值,它会另外创造一个对象,把值赋给这个新对象,然后把变量名与之绑定。
    看图:
    在这里插入图片描述
    不可变对象的优点:
    减少了相同值对内存的占用。
    缺点:我要修改这个变量绑定的值,如果内存中没用存在该值的内存块,那么必须重新开辟一块内存,把新地址与变量名绑定。而不是修改变量原来指向的内存块的值,这回给执行效率带来一定的降低。

  • 可变对象,自然就是说,可以在原来基础上去改变值。
    -在这里插入图片描述

  • 我们来看两个函数:

def f(a, L = []):
    L.append(a)
    print id(L)
    return L

print f(1)
print f(2)
print f(3)


#
[1]
[1, 2]
[1, 2, 3]
#
def f(a, L = None):
    if(L is None):
        L = []
    L.append(a)
    return L

print f(1)
print f(2)
print f(3)

#
[1]
[2]
[3]
#

第一个代码的输出,是因为L是可变对象,它被创建了之后,第二次调用的时候,我们发现,L存在,所有就不会重新创建(没有执行L=[]),所以会在原来的基础上放进去一个2.
第二个代码的输出,是因为每次L都被置为None了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值