python對象大小
A. python中字元怎麼比較大小排序
任何兩個對象都可以比較
相同類型的對象(實例),如果是數字型(int/float/long/complex),則按照簡單的大小來比較;如果是非數字型,且類(型)中定義了__cmp__(含__gt__,__lt__等)則按照__cmp__來比較,否則按照地址(id)來比較
不同類型的對象(實例),如果其中一個比較對象是數字型(int/float/long/complex等),則數字型的對象<其它非數字型的對象;如果兩個都是非數字型的對象,則按照類型名的順序比較,如{}
<
"abc"(按照"dict"
<
"str"),而"abc"
>
[1,2],
"abc"
<
(1,2)。
對於自定義的類(型)實例,如果繼承自基本類型,則按照基本類型的規則比較(1-3)。否則,old-style
class
<
new-style
class,
new-style
class之間按照類型名順序比較,old-style
class之間按照地址進行比較
bool類型是int的子類,且true=1,
false=0,比較時按照1-4來比較,如true
>
-1,
true
<
4.2,
true
<
"abc"等
上面的回答是針對python2.x,3.x的有較大的變化,如str和int比較時會拋出異常等。
回到題目,字元和數字的比較符合規則3,所以數字<字元。舉個例子,如100和'a'(ord('a')=97),有
100<'a'
B. python中namedtuple對象可以比較大小嗎
可以
namedtuple是繼承自tuple的子類。namedtuple創建一個和tuple類似的對象,而且對象擁有可訪問的屬性。
下面看個列子
from collections import namedtuple
# 定義一個namedtuple類型User,並包含name,sex和age屬性。
User = namedtuple('User', ['name', 'sex', 'age'])
# 創建一個User對象
user = User(name='kongxx', sex='male', age=21)
# 也可以通過一個list來創建一個User對象,這里注意需要使用"_make"方法
user = User._make(['kongxx', 'male', 21])
print user
# User(name='user1', sex='male', age=21)
# 獲取用戶的屬性
print user.name
print user.sex
print user.age
# 修改對象屬性,注意要使用"_replace"方法
user = user._replace(age=22)
print user
# User(name='user1', sex='male', age=21)
# 將User對象轉換成字典,注意要使用"_asdict"
print user._asdict()
# OrderedDict([('name', 'kongxx'), ('sex', 'male'), ('age', 22)])
C. 請教各位牛人,python中有沒有計算某個對象佔用內存大小的函數
1
2
s = 'abc'
print sys.getsizeof(s)
如果你要監測所有的變數,可以用python的smiley 模塊監測所有的內存變數情況
D. Python-與常規Python列表相比,NumPy有什麼優勢
NumPy的數組比Python列表更緊湊-您在Python中描述的列表列表至少需要20 MB左右,而單元格中具有單精度浮點數的NumPy 3D數組則需要4 MB。使用NumPy可以更快地讀取和寫入項目。
也許只關心一百萬個單元就不會那麼在意,但是肯定會關心十億個單元-兩種方法都不適合32位體系結構,但是使用64位版本,NumPy可以節省約4 GB ,僅Python一個就需要至少約12 GB(很多指針的大小加倍),這是一個昂貴得多的硬體!
差異主要是由於「間接性」造成的-Python列表是指向Python對象的指針的數組,每個指針至少4個位元組,對於最小的Python對象也至少包含16個位元組(類型指針為4,引用計數為4,類型為4值-內存分配器向上舍入為16)。NumPy數組是統一值的數組-單精度數字每個佔用4個位元組,雙精度數字每個佔用8個位元組。靈活性較差。
E. Python如何查看變數佔用空間大小
sys.getsizeof(object[, default])
下面是我摘錄的,希望對你有用。
以位元組(byte)為單位返回對象大小。 這個對象可以是任何類型的對象。 所以內置對象都能返回正確的結果 但不保證對第三方擴展有效,因為和具體實現相關。
getsizeof() 調用對象的 __sizeof__ 方法, 如果對象由垃圾收集器管理, 則會加上額外的垃圾收集器開銷。
F. python多個對象的某個成員比大小怎麼做
1 2 s = 'abc' print sys.getsizeof(s) 如果你要監測所有的變數,可以用python的smiley 模塊監測所有的內存變數情況
G. python中數據類型
數字類型:
①整型:
通常被稱為是整型或整數,可以是正整數或負整數,不帶小數點。Python3整型是沒有限制大小的,可以當做long類型使用, 但實際上由於機器內存的有限,我們使用的整數是不可能無限大的。
整型的四種表現形式:
2 進 制:以'0b'開頭。例如:'0b11011'表示10進制的27
8 進 制:以'0o'開頭。例如:'0o33'表示10進制的27
10進制:正常顯示
16進制:以'0x'開頭。例如:'0x1b'表示10進制的27
各進間數字進行轉換(內置函數):
bin(i):將i轉換為2進制,以「0b」開頭。
oct(i):將i轉換為8進制,以「0o」開頭。
int(i):將i轉換為10進制,正常顯示。
hex(i):將i轉換為16進制,以「0x」開頭。
②浮點數:
浮點型由整數部分與小數部分組成,浮點型也可以使用科學計數法表示(2.5e2 = 2.5 x 102 = 250)
③布爾類型:
所有標准對象均可用於布爾測試,同類型的對象之間可以比較大小。每個對象天生具有布爾True或False值。空對象,值為零的任何數字或者Null對象None的布爾值都是False。在Python3中True=1,False=0,可以和數字型進行運算。
下列對象的布爾值是False:
None;False;0(整型),0.0(浮點型);0L(長整形);0.0+0.0j(復數);「」(空字元串);[](空列表);()(空元組);{}(空字典)。
值不是上列的任何值的對象的布爾值都是True,例如non-empty,non-zero等。用戶創建的類實例如果是定義了nonzero(_nonzeor_())或length(_len_())且值為0,那麼它們的布爾值就是False。
④復數:
復數由實數部分和虛數部分構成,可以用a + bj,或者complex(a,b)表示, 復數的實部a和虛部b都是浮點型。
H. python提供了三種基本的數字類型
整數、浮點數
I. python中image對象的首字母必須大寫嗎
python大小寫敏感,第三方的模塊中的類、函數有的是大寫的,可以用help()函數查看說明,幫助里是大寫就必須要大寫
J. python如何控制內存
python控制內存的方法:
一、對象的引用計數機制
二、垃圾回收機制
三、內存池機制
一、對象的引用計數機制
Python內部使用引用計數,來保持追蹤內存中的對象,所有對象都有引用計數。
引用計數增加的情況:
1、一個對象分配一個新名稱
2、將其放入一個容器中(如列表、元組或字典)
引用計數減少的情況:
1、使用del語句對對象別名顯示的銷毀
2、引用超出作用域或被重新賦值 sys.getrefcount( )函數可以獲得對象的當前引用計數
多數情況下,引用計數比你猜測得要大得多。對於不可變數據(如數字和字元串),解釋器會在程序的不同部分共享內存,以便節約內存。
二、垃圾回收
1、當一個對象的引用計數歸零時,它將被垃圾收集機制處理掉。
2、當兩個對象a和b相互引用時,del語句可以減少a和b的引用計數,並銷毀用於引用底層對象的名稱。然而由於每個對象都包含一個對其他對象的應用,因此引用計數不會歸零,對象也不會銷毀。(從而導致內存泄露)。為解決這一問題,解釋器會定期執行一個循環檢測器,搜索不可訪問對象的循環並刪除它們。
三、內存池機制
Python提供了對內存的垃圾收集機制,但是它將不用的內存放到內存池而不是返回給操作系統。
1、Pymalloc機制。為了加速Python的執行效率,Python引入了一個內存池機制,用於管理對小塊內存的申請和釋放。
2、Python中所有小於256個位元組的對象都使用pymalloc實現的分配器,而大的對象則使用系統的malloc。
3、對於Python對象,如整數,浮點數和List,都有其獨立的私有內存池,對象間不共享他們的內存池。也就是說如果你分配又釋放了大量的整數,用於緩存這些整數的內存就不能再分配給浮點數。
更多Python知識請關注Python視頻教程欄目。