章节号

内容

1图片格式(png)

宽度大于620px,保持高宽

第1章节  import模块

1-1 import模块—sys.path

↓import导入模块的搜索路径:

In [1]: import sys

In [2]: sys.path

Out[2]:

#第一个为当前路径

['',

'/usr/lib/python36.zip',

'/usr/lib/python3.6',

'/usr/lib/python3.6/lib-dynload',

'/home/li/.local/lib/python3.6/site-packages',

'/usr/local/lib/python3.6/dist-packages',

'/usr/lib/python3/dist-packages',

'/usr/lib/python3/dist-packages/IPython/extensions',

'/home/li/.ipython']

In [3]:

↓添加一条搜索路径:

In [4]: sys.path.append("/home")

In [5]: sys.path

Out[5]:

['',

'/usr/lib/python36.zip',

'/usr/lib/python3.6',

'/usr/lib/python3.6/lib-dynload',

'/home/li/.local/lib/python3.6/site-packages',

'/usr/local/lib/python3.6/dist-packages',

'/usr/lib/python3/dist-packages',

'/usr/lib/python3/dist-packages/IPython/extensions',

'/home/li/.ipython',

'/home']

In [6]:

↓sys.path的一些用法:

1-2 import模块—重新导入模块

1、自定义模块并导入:

↓在某路径下,新建一个test.py文件,输入以下代码:

vim test.py

1 def test():

2 print("test import")

↓在sys.path中添加当前路径,便可导入使用:

In [1]: import sys

In [2]: sys.path

Out[2]:

['',

'/usr/lib/python2.7',

'/usr/lib/python2.7/plat-x86_64-linux-gnu',

'/usr/lib/python2.7/lib-tk',

'/usr/lib/python2.7/lib-old',

'/usr/lib/python2.7/lib-dynload',

'/usr/local/lib/python2.7/dist-packages',

'/usr/lib/python2.7/dist-packages',

'/usr/lib/python2.7/dist-packages/IPython/extensions',

'/home/li/.ipython']

In [3]: sys.path.append("/home/li")

In [4]: sys.path

Out[4]:

['',

'/usr/lib/python2.7',

'/usr/lib/python2.7/plat-x86_64-linux-gnu',

'/usr/lib/python2.7/lib-tk',

'/usr/lib/python2.7/lib-old',

'/usr/lib/python2.7/lib-dynload',

'/usr/local/lib/python2.7/dist-packages',

'/usr/lib/python2.7/dist-packages',

'/usr/lib/python2.7/dist-packages/IPython/extensions',

'/home/li/.ipython',

'/home/li']

In [5]: import test

In [6]: test.test()

test import

In [7]:

↑退出后path的添加会失效,再次使用需要再次导入。

2、重新导入模块reload(模块)

应用场景:在导入一个模块后,该模块代码被修改,如果不重新导入,则新修改的代码无法使用。再次使用import也不能完成预期,正确做法为:

In [7]: reload(test)

Out[7]:

1-3 import模块—模块的循环导入问题

什么是循环导入?

我用你,我导入你。同时你也用我,你导入我。

from 模块名 import 函数名

root@li-ThinkPad-T420s:/home/li# cat test.py

from text import text

def test():

print("test import")

text()

test()

root@li-ThinkPad-T420s:/home/li# cat text.py

from test import test

def text():

print("text import")

test()

text()

root@li-ThinkPad-T420s:/home/li#

root@li-ThinkPad-T420s:/home/li# python test.py

Traceback (most recent call last):

File "test.py", line 1, in

from text import text

File "/home/li/text.py", line 1, in

from test import test

File "/home/li/test.py", line 1, in

from text import text

ImportError: cannot import name text

root@li-ThinkPad-T420s:/home/li#

↑从设计角度来说,这种情况要严格避免。

第2章节  == 和 is

==是判断值是否相同

is是判断id是否相同(是否指向同一个东西)

In [20]: a=[1,2]

In [21]: b=[1,2]

In [22]: a is b

Out[22]: False

In [23]: id(a)

Out[23]: 140065919094080

In [24]: id(b)

Out[24]: 140065919170680

In [25]: a == b

Out[25]: True

↓注意这个问题,数字在负的X到正的X这一范围内,所有的id会变成相同的,超过这个范围则会不同。切记。

In [26]: a = 100

In [27]: b = 100

In [28]: a == b

Out[28]: True

In [29]: a is b

Out[29]: True

In [30]: a=10000

In [31]: b=10000

In [32]: id(a)

Out[32]: 94786674642736

In [33]: id(b)

Out[33]: 94786674642640

第3章节  深拷贝和浅拷贝

3-1 深拷贝和浅拷贝—深和浅的不同

1、深:我拿到了数据(copy.deepcopy)。改一个,另一个不变。

In [35]: a=[1,2,3]

In [39]: import copy

In [40]: b=copy.deepcopy(a)

In [41]: id(a)

Out[41]: 140065900535752

In [42]: id(b)

Out[42]: 140065909328424

#深拷贝

2、浅:我只拿到了地址。改一个,另一个也跟着变。

In [35]: a=[1,2,3]

In [36]: b=a

In [37]: id(a)

Out[37]: 140065900535752

In [38]: id(b)

Out[38]: 140065900535752

#浅拷贝

3-2 深拷贝和浅拷贝—多重引用下的深拷贝

深拷贝对多重引用会自动进行递归拷贝,一直到最底层。

In [55]: a

Out[55]: [1, 2, 3, 4]

In [56]: b

Out[56]: [1, 2, 3]

In [57]: c=[a,b]

In [58]: c

Out[58]: [[1, 2, 3, 4], [1, 2, 3]]

In [59]: d=c

In [60]: id(c)

Out[60]: 140065909614568

In [61]: id(d)

Out[61]: 140065909614568

In [62]: e=copy.deepcopy(c)

In [63]: id(e)

Out[63]: 140065909636632

In [64]: id(e[0])

Out[64]: 140065919104784

In [65]: id(c[0])

Out[65]: 140065900535752

In [66]: id(d[0])

Out[66]: 140065900535752

In [67]: e

Out[67]: [[1, 2, 3, 4], [1, 2, 3]]

3-3 深拷贝和浅拷贝—copy和deepcopy

copy模块中,还有一个copy.copy函数。

In [70]: a=[1,2]

In [71]: b=[3,4]

In [72]: c=[a,b]

In [73]: c

Out[73]: [[1, 2], [3, 4]]

In [74]: d=copy.copy(c)

In [75]: d

Out[75]: [[1, 2], [3, 4]]

In [76]: id(c)

Out[76]: 140065919152424

In [77]: id(d)

Out[77]: 140065918710200

In [78]: id(c[0])

Out[78]: 140065919059368

In [79]: id(d[0])

Out[79]: 140065919059368

copy()只识别第一层引用。

deepcopy()识别所有引用,一直到最底。

3-4 深拷贝和浅拷贝—copy()元组时特点

In [81]: a

Out[81]: [1, 2]

In [82]: b

Out[82]: [3, 4]

In [83]: c=(a,b)

In [84]: d=copy.copy(c)

In [85]: id(c)

Out[85]: 140065900473808

In [86]: id(d)

Out[86]: 140065900473808

In [87]: id(c[0])

Out[87]: 140065919059368

In [88]: id(d[0])

Out[88]: 140065919059368

In [89]: id(c[0][0])

Out[89]: 94786668758568

In [90]: id(d[0][0])

Out[90]: 94786668758568

元组本身是不可变类型,copy()判断出是不可变类型,第一层引用都不深入拷贝。copy()判断出是可变类型,深入拷贝第一层。

copy模块的功能一定要慎用,想清楚再用!

pythonimport是拷贝_02Python学习笔记之二.一【import、==和is、深浅拷贝】2019-08-17相关推荐

  1. 设计模式学习笔记(六)原型模式以及深浅拷贝的区别

    原型模式也是创建对象的一种方式,它一般用在这样的场景:系统中存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂而且耗费资源.这个时候使用原型模式的克隆方式,能够节省不少时间. ...

  2. Windows驱动开发学习笔记(二)—— 驱动调试内核编程基础

    Windows驱动开发学习笔记(二)-- 驱动调试&内核编程基础 基础知识 驱动调试 PDB(Program Debug Database) WinDbg 加载 PDB 实验:调试 .sys ...

  3. OpenCV学习笔记(二):3种常用访问图像中像素的方式

    OpenCV学习笔记(二):3种常用访问图像中像素的方式 #include <opencv2/opencv.hpp>using namespace cv; using namespace ...

  4. 【Java学习笔记之二十六】深入理解Java匿名内部类

    在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意 ...

  5. 编程范式(斯坦福大学)学习笔记《二》

    斯坦福大学开放课程:编程范式学习笔记<二> 本课讲述了C/C++关于int,float等数据的底层表示,以及赋值操作所进行的处理.本节内容比较简单,应该属于组成原理的基础知识,各种码的表示 ...

  6. JUC学习笔记(二)

    JUC学习笔记(二) volatile关键字 JMM(Java Memory Model | Java内存模型) JMM同步规定 原理 工作流程 内存模型图 volatile特点 可见性 禁止指令重排 ...

  7. 树莓派学习笔记(二)

    树莓派学习笔记(二)安装OpenCV环境 感谢 一.更换源 1.查看系统类型 2.更换源 二.环境搭建 1.sd卡扩容 2.OpenCV相关库安装 3.OpenCV的下载 4.OpenCV的安装 5. ...

  8. Programming C# 学习笔记(二) 出发:“Hello World”

    小序:      准备写这章的学习笔记了,啊,Hello World!多么亲切的语句,呵呵,当初学C语言的第一个程序就是输出它, 还记得费了好大劲终于把它输出来时候的那种兴奋感觉,真是让我怀念哦!(然 ...

  9. SVO学习笔记(二)

    SVO学习笔记(二) 这篇文章 稀疏图像对齐 地图点投影(地图与当前帧间的关系) reprojectMap reprojectPoint reprojectCell 特征点对齐中的非线性优化 结尾 这 ...

最新文章

  1. apache2.2.25+mod_jk-apache-2.2.2.so+apache-tomcat-7.0.56集群
  2. 定义一个DOG类(Java)
  3. 为何 Windows 10X 无法延续 Windows 的成功?
  4. 接口隔离原则——面向对象设计原则
  5. mysql恢复主服务器_MySQL 5.6主从复制第二部分[恢复某一台从服务器]
  6. 浪潮服务器 虚拟光驱,使用IPMI功能远程安装Windows Server 2003操作系统步骤
  7. 数据结构 之 并查集(Disjoint Set)
  8. 【Shell脚本学习指南笔记】重定向文件描述符 21
  9. VS2003远程调试
  10. 专门查英语单词的软件_有什么软件可以查英语单词
  11. S3C64xx设备树支持
  12. C++软件工程师的发展前景如何
  13. Android开发论坛汇总
  14. 积分球测试软件无法创建新文档,关于积分球测试的总结(最新整理)
  15. 郑州高新技术企业认定八大硬性条件是什么?
  16. 新年第一帖——元旦这天骑车迷路了
  17. 相位式激光测距全套方案
  18. javaScript回调函数
  19. att格式汇编指令_ATT汇编语法简介
  20. 科技云报道:向云转型有没有“捷径”? 信服云告诉你!

热门文章

  1. LeetCode之Merge Two Sorted Lists
  2. linux之netstat使用--10个常用的命令
  3. linux之cut命令使用和总结
  4. Struts2内置拦截器和自定义拦截器
  5. Android之PullToRefresh(ListView 、GridView 、WebView)使用详解和总结
  6. python怎么执行程序_小鹅通视频怎么下载?用python实现小鹅通视频下载(二)
  7. 史上最气人的数学家:文理双全智商还高,说话只说半句,解题只解半个,调戏人调戏了三百年还不够......
  8. 理工男都能有多痴情?
  9. 世界头号毒枭古斯曼被捕,全因被内部IT男出卖!
  10. mysql 中有什么命令_常用mysql命令大全