Python - Bir dizge değişkenini serbest bırakmak / değiştirmek, nasıl ele alınır? [kapalı]


-1

Bir parolayı düz metin passWdolarak dizge olarak adlandırılan bir değişkende sakladığımı söyleyin . Python attığımda (örneğin del passWdveya ile passWd= 'new random data') bu değişkeni nasıl serbest bırakır ?

Bir bayt dizisi olarak depolanan dize, ilk önce var olduğu hatıra yerine yazılabilir mi yoksa hafıza alanında değiştirilemeyen ve yeni bir değer belirlerken yeni bir bellek alanı belirlenirken değiştirilemeyen bir bellek setine yazılabilir mi? oluşturulan ve eski alan atılır, ancak boş yazılmaz.

Python'un bellek alanlarının güvenliğini nasıl uyguladığını ve bu konuda daha fazla bilgi edinmek istediğini, özellikle merak ediyorum çünkü sorguluyorum :)

İ kullanarak, bugüne kadar toplanan kadarıyla del(veya __del__) sorunlarına neden olabilir değişken otomatik bellek alanlarını serbest tercüman neden olur ve ayrıca ben emin değilim del böylece değerlerini silinmesine ilişkin thurrow edilir. Ama bu sadece topladıklarımdan ve siyah-beyaz bir şey değil :)


Birçok kişi burada yanıtı SU'da biliyor olsa da, bunun Yığın Taşması üzerine yazılması gerekir , sanırım yakında geçecek.
nerdwaller

SO hakkında soru sormaya cesaret edemedim, çünkü sorum “bu kod sorunuyla ilgili yardıma ihtiyacım var”, “daha ​​fazlası”, bellek yönetimi daha düşük seviyelerde nasıl uygulanıyor ”:) ama sanırım SO verebilirim benden nefret etme şansı: P
Torxed

1
Şurada göndermek için bir öneri: passPython'da bir anahtar kelime olduğundan ve kullanılamadığından geçerli bir tanımlayıcı kullanın :) Oradaki çoğu insan oldukça makul.
nerdwaller

İyi ve geçerli bir nokta! Teşekkür ederim! :) Ayrıca, çok makul!
Torxed

Bir dahaki sefere lütfen yazıyı geçme. @Nerdwaller'ın dediği gibi, sorunuzun aktarılması mümkün olabilirdi.
slhck

Yanıtlar:


1

Cevap uygulamaya özeldir. dan http://docs.python.org/2/library/stdtypes.html

5.6 Sıra Tipleri altında, bazı uygulamaların (biri için CPython) bellekte yerinde dize güncellemeleri yaptığını açıklayan "Notlar # 6" 'ya dikkat edin, oysa diğerleri dize değiştirilebilen / değiştirildiğinde tanımlandığında değiştirilemez bir nesne olarak kabul edilebilir. bellekteki yeni alan.


Durumun bu olduğunu umuyordum, aksi takdirde python bunun için bir geçici çözümü olmasaydı, aslında bu işi yapmak için kendi C kodumu yazmam gerekecekti. Py2.6 varsayarsak + yerinde concationations büyük olan meydana gibi birtakım şeyler vardır .. Ama nasıl silme hakkında, bunlar momory aslında temizlenmiş boş yerini ya da bir standarttır olduğunu bir şekilde ele olan free()bir üzerine malloctahsisi ? StackOverflow'a göre serbest bırakıldı, güvenlik riski oluşturdu ve passWd = '...'bellek alanını boşaltmadan önce yapmak zorunda kalacağım ve o zaman bile emin olabilir miyim?
Torxed

python bir davetsiz misafir dilidir ve çöp toplama işlemini varsayılan bellek kurtarma mekanizması olarak kullanır. başına docs.python.org/2/library/gc.html , __del __ () tanımlamamış nesneler çöp toplanır, oysa toplanamayan ve gc.Garbage öğesinde görünen nesneler geri döndürülür ve manuel olarak serbest bırakılmalıdır. gc.collect () işlevi sistemin bellekteki bağlantısız nesneleri atmaya başlamasına neden olur, ancak çöp toplama işlemi hiçbir zaman açık bir şey değildir, ancak en iyi çaba denemesidir.
Frank Thomas
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.