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

章节号

内容

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模块的功能一定要慎用,想清楚再用!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311146.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

以正确的方式下载和配置 ASP.NET Core 官方源码

我们可以在Github上面直接查看ASP.NETCore 3.x的源代码,但是我们也可以把源代码下载下来进行查看。而下载源代码进行查看有很多好处:任意的导航源代码内置了一个示例项目直接调试源代码下载源代码想下载并配置好源码,你需要:最新版…

2017年第八届蓝桥杯国赛B组试题A-36进制-进制转换

【问题描述】 对于16进制,我们使用字母A-F来表示10及以上的数字。 如法炮制,一直用到字母Z,就可以表示36进制。 36进制中,A表示10,Z表示35,AA表示370 你能算出 MANY 表示的数字用10进制表示是多少吗?【答…

h5应用 vue 钉钉_uniapp开发一个小视频应用(一)

“uni-app 是一个使用 Vue.js 开发所有前端应用的框架,是一种终极的跨平台解决方案,这里的平台,主要指的是App平台(android、ios)、小程序平台、H5平台。开发者编写一套代码,可发布到iOS、Android、H5、以及各种小程序(微信/支付宝…

Blazor入门

NOW现在行动!Blazor是一个基于C#, Razor和 HTML的新的Web UI框架。它通过WebAssembly运行在浏览器中。有利于使用C#而不是JavaScript构建交互式的Web UI。这篇文章演示了如何使用Blazor构建SPA应用。Blazor简化了可在任…

第七届蓝桥杯(国赛)——随意组合-dfs,next_permutation

【问题描述】 小明被绑架到X星球的巫师W那里。 其时,W正在玩弄两组数据 (2 3 5 8) 和 (1 4 6 7) 他命令小明从一组数据中分别取数与另一组中的数配对,共配成4对(组中的每个数必被用到)。 小明的配法是:{(8,7),(5,6),(…

方框加对勾怎么输入_对号“√”怎么输入到方框“□”-空格对号

对号”√”怎么输入到方框”□”内啊??是这样的,我在做一个表格例如:1,是否完成。□2,是否已经准备好资料。□如果“是”就在方框内打对号“√”,不是就打错号“X”但是怎么打在方框内阿&#x…

C#桌面开发的未来WebWindow

WebWindowWebWindow是跨平台的库。Web Window的当前实验实现可在以下平台上运行:Windows – 需要基于Chromium的EdgeLinux – 使用WebKitMac – 需要Safari源码https://github.com/SteveSandersonMS/WebWindow.gitZeje Fork的分支:https://github.com/ze…

第七届蓝桥杯决赛真题 - 凑平方数-全排列+dfs+set去重

题目: 凑平方数 把0~9这10个数字,分成多个组,每个组恰好是一个平方数,这是能够 办到的。比如:0, 36, 5948721再比如: 1098524736 1, 25, 6390784 0, 4, 289, 15376 等等…注意,0可以作为独立的…

计算标准差分母是n还是n-1?

概述 提问:在我们计算某些数据标准差(或者方差)的时候,会发现有些公式分母是n,而有些公式的分母却是(n-1),那么到底哪个公式才是正确的呢? 答案: 如果是算…

三调 图斑地类面积_三调对于最小上图图斑面积的要求是:

【单选题】设二维数组 A[1...m,1...n] (即 m 行 n 列)按行存储在 B[1...m*n] 中,则二维数组元素 A[i,j] 在一位数组 B 中的下标为( )【单选题】二维数组 a[1..N , 1..N] 可以按行存储或按列存储。对于数组元素 a[i,j] ( 1<i,j<N ),当( )时,在按行和按列两种存储方式下,其…

C#小游戏—钢铁侠VS太空侵略者

身为漫威迷&#xff0c;最近又把《钢铁侠》和《复仇者联盟》系列又重温了一遍&#xff0c;真的是印证了那句话&#xff1a;“读书百遍&#xff0c;其意自现”。看电影一个道理&#xff0c;每看一遍&#xff0c;都有不懂的感受~ 不知道大伙是不是也有同样的感受&#xff0c;对于…

受检异常 非受检异常_这样设计 Java 异常更优雅,赶紧学

来源&#xff1a;Lrwinlrwinx.github.io/2016/04/28/如何优雅的设计java异常/导语异常处理是程序开发中必不可少操作之一&#xff0c;但如何正确优雅的对异常进行处理确是一门学问&#xff0c;笔者根据自己的开发经验来谈一谈我是如何对异常进行处理的。由于本文只作一些经验之…

[蓝桥杯][2018年第九届真题]调手表-bfs

小明买了块高端大气上档次的电子手表&#xff0c;他正准备调时间呢。在 M78 星云&#xff0c;时间的计量单位和地球上不同&#xff0c;M78 星云的一个小时有 n 分钟。大家都知道&#xff0c;手表只有一个按钮可以把当前的数加一。在调分钟的时候&#xff0c;如果当前显示的数是…

.NET Core开发实战(第23课:静态文件中间件:前后端分离开发合并部署骚操作)--学习笔记(上)...

23 | 静态文件中间件&#xff1a;前后端分离开发合并部署骚操作我们先来看一下静态文件中间件有哪些能力1、支持指定相对路径2、支持目录的浏览3、支持设置默认文档4、支持多目录映射源码链接&#xff1a;https://github.com/witskeeper/geektime/tree/master/samples/StaticFi…

src获取同级目录中的图片_一个简单的Python爬虫实例:百度贴吧页面下载图片

本文主要实现一个简单的爬虫&#xff0c;目的是从一个百度贴吧页面下载图片。1. 概述本文主要实现一个简单的爬虫&#xff0c;目的是从一个百度贴吧页面下载图片。下载图片的步骤如下&#xff1a;获取网页html文本内容&#xff1b;分析html中图片的html标签特征&#xff0c;用正…

C++并查集的实现

编号代表每一个元素。数组par表示的是父亲的编号&#xff0c;也就是前驱。par[x] x时&#xff0c;x是所在的树的根。 代码如下&#xff1a; #include <iostream> using namespace std; const int N 100010; int par[N], ranks[N];void init(int n) { //初始化n个元素…

十问十答 Apache 许可证

Apache 许可证由 Apache Software Foundation&#xff08;ASF&#xff09;发行&#xff0c;是一个由强大社区支持的流行的被广泛部署的许可证。Apache 许可证允许你自由地使用、修改和分发任何 Apache 许可的产品&#xff0c;前提是遵循 Apache 许可的条款。01Apache 许可证的条…

(一)基于企业现金流预测的投资决策-项目介绍

项目背景 某企业想提高现金流的利用率,以便产生更大的投资收益。遇到的问题是:何如在保证更多的资金流向高收益投资的同时,不出现资金短缺的问题。 确定可用于投资的金额 Step1 预测未来的收入、支出和余额 潜在逻辑: 现金流 = 收入 - 支出当月余额(资金存量)= 上月余…

连续不等_第九讲 函数的连续性与函数的间断点

写在前面的话&#xff1a;本讲主要内容讲了连续性的定义&#xff0c;及其三个衍生的表述方式&#xff0c;函数的几类间断点。最后一个例题回顾了极限的保号性&#xff0c;是不是又有点生疏了&#xff1f;没关系&#xff0c;回过头再看看。反复研读&#xff0c;用心体会。如果有…

[蓝桥杯2015决赛]分机号-枚举(水题)

题目描述 X老板脾气古怪&#xff0c;他们公司的电话分机号都是3位数&#xff0c;老板规定&#xff0c;所有号码必须是降序排列&#xff0c;且不能有重复的数位。 比如&#xff1a;751,520,321 都满足要求&#xff0c;而766,918,201 就不符合要求。 现在请你计算一下&#xff0c…