Bir dizenin bellekte kaç bayt kaç tane olduğunu söyleyecek bir işlevi var mı?Bir dize kaç bayta sahip
Bütün dizeyi bir kerede aktarmak için bir yuva arabellek boyutu belirlemeliyim. len(s)
gibi bir şey yeterli olacaktır böylece
Bir dizenin bellekte kaç bayt kaç tane olduğunu söyleyecek bir işlevi var mı?Bir dize kaç bayta sahip
Bütün dizeyi bir kerede aktarmak için bir yuva arabellek boyutu belirlemeliyim. len(s)
gibi bir şey yeterli olacaktır böylece
import sys
sys.getsizeof(s)
# getsizeof(object, default) -> int
# Return the size of object in bytes.
Ama aslında, onun temsil uzunluğunu bilmemiz gerekir.
+1. Bu, nesneyi temsil etmek için tüm ekstra bagajı iade etmez mi? PyObject'deki alanların geri kalanı. –
@Noufal - tam olarak. Basit bir 'a' dizesi için 41 değerini döndürür. – eumiro
Benim 'a' 25 bayta ihtiyaç duyar; Bu yüzden ya 64-bit Python'u çalıştırıyorsunuz ya da kullandığım yazı tipi daha basit vuruşlara sahip oluyor :) – tzot
Bu bir Python 2.x str
ise, len
olsun. o tercih kodlamayı kullanarak (sırasıyla veya str
,) bir Python 3.x str
(veya bir Python 2.x unicode
), birinci kodlama yapın bytes
içelim ('utf-8'
iyi bir seçimdir) ve sonra/kodlanmış bayt len
olsun str nesnesi. Yani dize boyutu hakkında ilgilendirmiyor
>>> len("你好".encode("utf8"))
6
Gerçekten de bu doğru cevap. Bu 'sys.getsizeof()' size istediğiniz şeyi vermez. Yani, eğer utf-8 kodlanmış bir dizginiz varsa, len (myString) 'i yerine, sadece“ len (myString.encode ("utf8")) ' – Tom
Bu doğru cevap olmalıdır. Dize, unicode ya da değil için tam olarak kaç bayta ihtiyacınız olduğunu söyleyecektir. Yine de, dizgenin iletilmek üzere baytlara kodlanması için iyi bir şans var, bu yüzden bir performans isabeti olabileceğinden şüpheliyim. – Taywee
: Çin olanlar 3 bayt her kullandığınızda ise
:
Örneğin, ASCII karakterleri 1 bayt her kullandığınızda bellekte değil, belirli bir kodlamada ne kadardır. Her zamanki yol, dizgeyi (örneğin, UTF-8) aktarmanız gereken kodlamada bir bayt dizisine (muhtemelen Python'da bayt dizisi) dönüştürmek ve uzunluğu elde etmek olacaktır. – Joey
Yerleşik len() hakkında nasıl? – gimel
@Joey: Seni anlamıyorum, neden kodlamanın uzunluğu olduğunu düşünüyorsun? Hatta aynı konuyla karşılaşıyorum, tel üzerinden gönderilecek (string) içeriklerin boyutunu bilmek zorundayım. Gerçekten ihtiyacım olan şey, bayt cinsinden, bu dizgenin uzunluğuyla ne yapardım? – 0xc0de