(1).什麼是包(package)?
在python中,用來包裹模組的資料夾,資料夾是可以當成包使用的,包並不是資料夾!!
在python中,如果乙個資料夾存在__init__.py這個模組檔案的話,這個資料夾就是包,init.py一般用來初始化檔案!
(2).什麼是模組(module)?
xx.py檔案,儲存是要執行或者使用**,以及一些自定義的模組
(2).常見的導包方式?
格式一:import package.module
格式二:import package.module as alias
格式三:from . import module (. 當前 或者 .
. 上級)
格式四:from package import module as alias
格式五:from package import * #表示匯入包的所有模組
注:有時候,使用一些第三方模組,會發現不能使用*匯入模組,這時只有在__all__屬性申明過的模組才能使用萬用字元匯入所有模組
is判斷兩個變數的記憶體位址,==判斷兩個變數的值
注:python記憶體中,資料區儲存的常量儲存固定的不變的值和一些緩衝資料。python官方(在pycharm可能範圍大)做了乙個小整型緩衝區(也會有字串緩衝區),放的是**-5到256**的這些值,當變數賦值這些數時,直接拿來呼叫小整形緩衝區裡的這些值,比較方便。
>>
> a=
255 #python記憶體存在小整型緩衝區,範圍是-5~
256,所以在賦值時,就會直接呼叫這些值,所以兩個變數的記憶體位址相同
>>
> b=
255>>
> a is b
true
>>
> a=
256>>
> b=
256>>
> a is b
true
>>
> a=
257 #超過那個範圍記憶體位址就不同
>>
> b=
257>>
> a is b
false
>>
> a=
10>>
> b=a #位址傳遞
>>
> a is b #is判斷兩個變數的記憶體位址
true
1.淺拷貝:只拷貝第一層物件,子物件藕斷絲連
第一種方法:列表中的copy
()方法
>>
> ls=[1
,2,3
]>>
> ls1=ls.
copy()
>>
> ls is ls1
false
>>
> ls.(4
)>>
> ls [1
,2,3
,4]>>
> ls1 [1
,2,3
]若不是列表物件,該怎麼實現淺拷貝呢?這個時候就需要copy模組
第二種方法:copy模組的copy
()方法
>>
> import copy
>>
>
dir(copy)
['copy'
,'deepcopy'
]>>
> ls=[1
,2,3
]>>
> ls1=copy.
copy
(ls)
>>
> ls is ls1
false
>>
> ls.(4
)>>
> ls [1
,2,3
,4]>>
> ls1 [1
,2,3
]>>
> ls is ls1
false
注:淺拷貝並不是把物件完整的拷貝,而是只拷貝了第一層物件,如果物件中儲存子物件,那麼子物件還是藕斷絲連
>>
> ls=[1
,2,[
1,2]
]>>
> ls1=ls.
copy()
>>
> ls[2]
.(3)
>>
> ls [1
,2,[
1,2,
3]]>>
> ls1 [1
,2,[
1,2,
3]]>>
> ls is ls1
false
2.深拷貝:使用遞迴的方式拷貝,兩個物件沒有任何關係
方法:用copy模組的deepcopy
()方法
>>
> import copy
>>
> ls=[1
,2,[
1,2]
]>>
> ls1=copy.
deepcopy
(ls)
>>
> ls[2]
.(3)
>>
> ls [1
,2,[
1,2,
3]]>>
> ls1 [1
,2,[
1,2]
]>>
> ls is ls1
false
3.淺拷貝與深拷貝的特殊情況:元組、字串是不可變型別,所以深淺拷貝後,永遠只有乙份記憶體,此外還有一些特殊情況:如元組裡有乙個子物件時可變型別(列表)
>>
> import copy
>>
> t=(1
,2,[
1,2]
)>>
> t1=copy.
copy
(t) #淺拷貝只拷貝第一層物件,則代表t就是個元組
>>
> t is t1
true
>>
> t2=copy.
deepcopy
(t) #深拷貝遞迴拷貝
>>
> t is t2
false
>>
> t[2]
.(3)
>>
> t (1
,2,[
1,2,
3])>>
> t1 (1
,2,[
1,2,
3])>>
> t2 (1
,2,[
1,2]
)>>
> t is t1
true
>> t is t2
false
4.怎麼選擇什麼時候使用淺拷貝、什麼時候使用深拷貝?
1、需要將當前物件拷貝的時候,一般建議拷貝為淺拷貝,(效率高,記憶體占有少)
2、如果說,就是需要完全分離,請使用深拷貝
Python 高階 模組 包
命名空間和變數作用域的比較 變數名的查詢覆蓋 匯入模組 模組匯入的特性 模組內建函式 package 包 預設的模組搜尋路徑在 python 解析器編譯安裝時被指定,我們可以通過 sys 模組來檢視和修改它 in 4 sys.path out 4 usr bin usr lib python2.7 ...
高階python 包 和模組
包 簡單而言,包就是資料夾,用來存放檔案。模組 檔案或檔案的集合 python中 和is 的區別 主要 判斷的是兩個變數的值 is 用來判斷兩個變數的記憶體位址 引用傳遞僅僅是資料的引用 is 主要 呼叫的是的是 ip位址 深淺拷貝 1 匯入 copy import copy b copy。copy...
Python高階二 模組和包
同名模組 放入不同包中 import package1.file1 如何區分包和普通目錄 包下面有乙個 init py檔案 匯入模組 from package import file1 或者 import package.file from os import path print path.isd...