Python学习之路——基础2(含深浅拷贝)

 逻辑运算符:not  and  or

  等同于c/c++中的 !、&&、||,除了写法上的不同,实际原理是一样的。

  运算也遵循短路原则。由于Python本身不支持++/--操作符,所以避免了类似于c/c++中不慎在&&和||后的表达式中加入++/--运算符,而实际程序运行却产生超出预期的效果,满屏查错却迟迟无法解决。

    条件1 or 条件2      #条件1为真时,不判断条件2

    条件3 and 条件4   #条件3为假时,不判断条件4

字符格式化输出 %s %d %f

 

深浅拷贝

  浅拷贝 最简单的记忆方法就是,只拷贝最外层的容器。

  深拷贝 就是拷贝出一份副本。

  对序列执行切片操作时,返回的切片都是副本。但是浅拷贝。   

 1 import copy
 2 
 3 names = [1, 2, 3, [5, 6]]
 4 
 5 n = names
 6 m = names[:]                    # slicing
 7 k = copy.copy(names)            # shallow copy
 8 # k2 = names.copy()
 9 j = copy.deepcopy(names)        # deep copy
10 
11 print(n is names, n == names)
12 print(m is names, m == names)
13 print(j is names, j == names)
14 print(k is names, k == names)
15 
16 print(j is m, m is k, j is k)
17 print(j == m, m == k, j == k)
18 
19 names[3][0] = 7
20 print(k, j)
21 print(id(names), id(n), id(m), id(k))
22 
23 for a in names:
24     print(id(a))
25 
26 for a in k:
27     print(id(a))

  相关文章移步这里吧:Python的深拷贝与浅拷贝

  之前有困惑:既然copy()是浅拷贝,k当中存储的内存地址和names所存储的内存地址相同,为什么k is names返回了False呢?

    因为k是创建的新的对象,在内存中开辟出一块内存用来存储与names相同的内存地址,这块内存的地址和names并不一样,所以k is names返回了False。

    只有在两个变量指向同一个内存地址时,这两者使用is关键字才会返回True,这时其中一个变量名其实只是给之前开辟出的内存块地址起了别名而已。

转载于:https://www.cnblogs.com/isupersun/p/8748707.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值