日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

發布時間:2023/12/4 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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模塊的功能一定要慎用,想清楚再用!

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的pythonimport是拷贝_02Python学习笔记之二.一【import、==和is、深浅拷贝】2019-08-17的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。