


Pemahaman Senarai Python dan Perilaku Memori Iterator Analisis mendalam
Mekanisme Penilaian Tidak Laksam Python
Di Python, penilaian ekspresi biasanya "tidak malas", yang bermaksud bahawa apabila ekspresi dilaksanakan, nilainya dikira dengan segera, dan bukannya menunggu sehingga diperlukan. Untuk pemahaman senarai [ungkapan untuk item dalam itable], ini bermakna bahawa tidak kira sama ada hasil pemahaman senarai ini diberikan kepada pembolehubah, ia akan membina objek senarai lengkap dan semua elemennya dalam ingatan.
Pertimbangkan dua senario yang menunjukkan tahap persamaan yang tinggi dalam jejak memori awal:
Senario 1: Senarai secara eksplisit terikat kepada pembolehubah
Apabila kita menetapkan hasil pemahaman senarai kepada pembolehubah, objek senarai dan semua elemen yang terkandung di dalamnya akan kekal dalam ingatan sehingga pemboleh ubah ditugaskan, dipadam, atau melebihi skopnya.
# Kod 1: Senarai secara eksplisit mengikat kepada sys import berubah -ubah # Barisan kod ini akan segera membuat senarai lengkap 5000 bilangan bulat dan mengikatnya ke my_list my_list = [l untuk l dalam julat (5000)] cetak (f "senarai 'my_list' objek memori jejak memori (tidak termasuk elemen itu sendiri): {sys.getSizeof (my_list)} bait") # NOTA: SYS.GetSizeOf () Mengembalikan jejak memori objek senarai itu sendiri. # Tidak termasuk jumlah penggunaan memori 5000 objek integer di dalamnya. Tetapi yang penting, 5000 objek integer ini telah dibuat. # Buat Iterator dari senarai yang ada my_iter1 = iter (my_list) Cetak (F "Iterator 'My_iter1' Object 'Jejak memori: {sys.getSizeof (my_iter1)} bytes (biasanya lebih kecil)") # Dalam senario ini, my_list dan semua objek integer yang dirujuk akan terus menduduki ingatan. # Sehingga my_list dikumpulkan sampah atau program berakhir.
Dalam contoh ini, [L untuk l dalam julat (5000)] mencipta senarai 5000 bilangan bulat. Walaupun kita kemudian membuat iterator daripadanya, my_list asal dan semua elemennya masih wujud dalam ingatan dan boleh diakses melalui pemboleh ubah my_list.
Senario 2: Senarai literals digunakan secara langsung untuk penciptaan iterator
Apabila hasil pemahaman senarai tidak ditugaskan secara eksplisit kepada mana -mana pembolehubah, tetapi secara langsung diserahkan kepada fungsi (seperti ITER ()), Python juga akan membuat senarai ini sepenuhnya.
# Kod 2: Senarai literals digunakan secara langsung untuk membuat sys import oleh iterator # Walaupun tidak ada penerimaan berubah -ubah yang jelas, [i for I in Range (5000)] akan segera membuat senarai lengkap # dengan 5000 bilangan bulat. # Kemudian, fungsi ITER () akan menerima senarai yang dibuat sementara ini sebagai parameter. my_iter2 = iter ([i for i dalam julat (5000)]) Cetak (f "Iterator 'my_iter2' jejak memori objek: {sys.getSizeof (my_iter2)} bytes (biasanya lebih kecil)") # Titik Utama: Objek Senarai Anonymous digunakan untuk membuat iterator, selepas fungsi ITER () pulangan, # Jika tidak ada rujukan lain, ia akan segera menjadi calon untuk koleksi sampah.
Dalam senario ini, [I for I in Range (5000)] juga akan membuat senarai 5000 bilangan bulat. Fungsi ITER () menerima senarai sementara ini dan mengembalikan iterator untuknya. Sebaik sahaja fungsi ITER () dilaksanakan dan tidak ada tempat lain yang merujuk objek senarai sementara ini, mekanisme pengumpulan sampah Python dapat mengitar semula memori senarai dan unsur -unsurnya.
Perbezaan teras antara penggunaan memori dan kitaran hayat
Melalui analisis di atas, kita dapat membuat kesimpulan berikut:
- Jejak Memori Awal: Dalam kedua -dua senario, ungkapan [l untuk l dalam julat (5000)] atau [I untuk I dalam julat (5000)] akan mencipta dan menduduki kira -kira ruang ingatan yang sama apabila dilaksanakan, kerana Python akan membina senarai ini sepenuhnya. Oleh itu, dari perspektif "sama ada sejumlah besar data dicipta", Kod 1 dan Kod 2 adalah serupa dalam peringkat penciptaan senarai.
- Kitaran hayat memori: Perbezaan teras terletak pada kitaran hayat objek senarai dalam ingatan.
- Dalam senario satu , senarai itu terikat kepada pemboleh ubah my_list, dan ingatannya akan terus dimakan sehingga kitaran hidup pembolehubah my_list berakhir.
- Dalam Senario 2 , senarai itu adalah objek sementara, tanpa nama. Ia dicipta dan digunakan sebagai argumen kepada fungsi ITER (), dan apabila fungsi ITER () kembali dan tidak ada rujukan lain yang menunjukkan objek senarai ini, ia segera menjadi calon untuk pengumpulan sampah. Ini bermakna jejak ingatannya adalah jangka pendek.
Singkatnya, kedua -dua func (ekspresi) dan variabel = ekspresi; Mod Func (Variable), di bawah mekanisme penilaian python yang tidak malas, ekspresi perlu dikira sepenuhnya dan memori yang diperuntukkan. Satu -satunya perbezaan ialah selepas func () pulangan, jika memori tidak disimpan secara dalaman oleh Func (), ingatannya akan dikitar semula dengan segera; manakala yang terakhir akan memanjangkan kitaran hayat memori kerana kewujudan pembolehubah.
Pengoptimuman dan langkah berjaga -jaga
Bagi aplikasi yang menangani set data yang besar atau mengejar kecekapan memori, mewujudkan senarai lengkap secara langsung bukanlah pilihan terbaik.
1. Mengoptimumkan memori menggunakan ekspresi penjana
Jika matlamat anda adalah untuk membuat iterator dan anda tidak perlu menyimpan keseluruhan senarai dalam ingatan pada masa yang sama, anda harus menggunakan ekspresi penjana dan bukannya senarai pemantauan. Ungkapan penjana menggunakan tanda kurung () bukan kurungan persegi [], yang tidak membina semua elemen sekaligus, tetapi menghasilkannya atas permintaan:
# Gunakan sys import ekspresi penjana # my_generator_iter adalah objek penjana yang tidak membuat semua 5000 bilangan bulat segera my_generator_iter = (i untuk i dalam julat (5000)) cetak (f "penggunaan memori objek penjana 'my_generator_iter': {sys.getSizeof (my_generator_iter)} bytes (sangat kecil)") # Hanya apabila meleleh, unsur -unsur akan dihasilkan satu persatu dan memori untuk item dalam my_generator_iter: # Item proses lulus
Kelebihan ekspresi penjana adalah bahawa ia hanya mengira dan menghasilkan elemen seterusnya apabila diperlukan, sangat mengurangkan jejak memori puncak.
2. Memahami tanggungjawab fungsi iter ()
Fungsi fungsi ITER () adalah untuk mendapatkan iterator objek. Ia tidak bertanggungjawab untuk membuat data itu sendiri, melainkan mendapatkan iterator dari objek yang sedia ada. Oleh itu, jika anda melewati senarai yang besar, maka penggunaan penciptaan dan memori senarai besar ini telah berlaku, dan iTer () hanya menyediakan mekanisme traversal atas dasar ini.
3. Mekanisme Pengumpulan Sampah Python
Python menggunakan pengiraan rujukan sebagai mekanisme pengumpulan sampah utama. Apabila kiraan rujukan objek menjadi 0, ia menjadi calon untuk koleksi sampah. Untuk rujukan bulat, Python juga menggunakan algoritma markah dan payudara untuk diproses. Memahami mekanisme ini membantu menguruskan memori yang lebih baik.
Meringkaskan
Apabila proses Python memproses komprehensif, tanpa mengira sama ada hasilnya diberikan kepada pemboleh ubah, ia akan terlebih dahulu melakukan penilaian lengkap dan membina objek senarai lengkap dalam ingatan. Oleh itu, iter ([i for i dalam julat (5000)]) dan my_list = [l untuk l dalam julat (5000)]; ITER (my_list) adalah serupa dalam peruntukan memori awal, kerana kedua -duanya membuat senarai 5000 bilangan bulat. Perbezaan utama adalah kitaran hayat objek senarai ini: senarai harfiah yang tidak terikat kepada pembolehubah akan menjadi calon untuk mengumpul sampah lebih cepat setelah menyelesaikan tanggungjawabnya (jika digunakan oleh ITER ()), sementara senarai pembolehubah akan terus memori sehingga akhir kitaran hayat pembolehubah.
Untuk mengurus memori secara berkesan, terutamanya apabila memproses sejumlah besar data, disyorkan untuk menggunakan ekspresi penjana untuk item dalam itable untuk membuat iterator untuk mengelakkan memuat semua data ke dalam memori sekaligus.
Atas ialah kandungan terperinci Pemahaman Senarai Python dan Perilaku Memori Iterator Analisis mendalam. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Stock Market GPT
Penyelidikan pelaburan dikuasakan AI untuk keputusan yang lebih bijak

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Jalankan pipinstall-rrequirements.txt untuk memasang pakej ketergantungan. Adalah disyorkan untuk mencipta dan mengaktifkan persekitaran maya terlebih dahulu untuk mengelakkan konflik, memastikan bahawa laluan fail adalah betul dan PIP telah dikemas kini, dan menggunakan pilihan seperti-tidak-deps atau-pengguna untuk menyesuaikan tingkah laku pemasangan jika perlu.

Tutorial ini memperincikan bagaimana untuk menggabungkan penyesuai LORA PEFT dengan model asas untuk menghasilkan model yang sepenuhnya bebas. Artikel ini menunjukkan bahawa adalah salah untuk menggunakan transformer.automodel secara langsung untuk memuatkan penyesuai dan menggabungkan berat secara manual, dan menyediakan proses yang betul untuk menggunakan kaedah Merge_and_unload di perpustakaan PEFT. Di samping itu, tutorial juga menekankan pentingnya menangani segmen perkataan dan membincangkan isu dan penyelesaian keserasian versi PEFT.

Python adalah alat ujian yang mudah dan berkuasa di Python. Selepas pemasangan, fail ujian ditemui secara automatik mengikut peraturan penamaan. Tulis fungsi bermula dengan ujian untuk ujian pernyataan, gunakan @pytest.fixture untuk membuat data ujian yang boleh diguna semula, mengesahkan pengecualian melalui pytest.raises, menyokong menjalankan ujian tertentu dan pelbagai pilihan baris arahan, dan meningkatkan kecekapan ujian.

Artikel ini bertujuan untuk meneroka masalah biasa ketepatan pengiraan yang tidak mencukupi bagi nombor titik terapung di Python dan Numpy, dan menjelaskan bahawa punca akarnya terletak pada batasan perwakilan nombor terapung 64-bit standard. Untuk senario pengkomputeran yang memerlukan ketepatan yang lebih tinggi, artikel itu akan memperkenalkan dan membandingkan kaedah penggunaan, ciri-ciri dan senario yang berkenaan dengan perpustakaan matematik ketepatan tinggi seperti MPMATH, SYMPY dan GMPY untuk membantu pembaca memilih alat yang tepat untuk menyelesaikan keperluan ketepatan yang rumit.

TheargParsemoduleisThereMendingWayOhandLecommand-lineargumentsinpython, menyediakan robrobustparsing, typevalidation, helpmessages, anderrorhandling; usesy.argvforsimplecasesrequiringminiminalsetup.

PYPDF2, PDFPlumber dan FPDF adalah perpustakaan teras untuk Python untuk memproses PDF. Gunakan pypdf2 untuk melakukan pengekstrakan teks, penggabungan, pemisahan dan penyulitan, seperti membaca halaman melalui pdfreader dan memanggil extract_text () untuk mendapatkan kandungan; PDFplumber lebih sesuai untuk mengekalkan pengekstrakan teks susun atur dan pengiktirafan jadual, dan menyokong extract_tables () untuk menangkap data jadual dengan tepat; FPDF (disyorkan FPDF2) digunakan untuk menjana PDF, dan dokumen dibina dan dikeluarkan melalui add_page (), set_font () dan sel (). Apabila menggabungkan PDF, kaedah tambahan PDFWriter () dapat mengintegrasikan pelbagai fail

Mendapatkan masa semasa boleh dilaksanakan di Python melalui modul DateTime. 1. Gunakan datetime.now () untuk mendapatkan masa semasa tempatan, 2. Gunakan strftime ("%y-%m-%d%h:%m:%s") untuk memformat tahun, bulan, hari, jam, minit dan kedua, 3 menggunakan datetime.d. UTCNOW (), dan operasi harian dapat memenuhi keperluan dengan menggabungkan datetime.now () dengan rentetan yang diformat.

Tutorial ini menunjukkan secara terperinci bagaimana untuk mengekstrak, mengaitkan, dan mengintegrasikan data tertentu dengan cekap dari pelbagai fail teks menggunakan perpustakaan Python's Pandas. Dengan memuatkan data fail ke dalam data data dan menggunakan operasi gabungan untuk melaksanakan sambungan dalaman berdasarkan alamat IP dan alamat MAC, pelaksanaan akhir yang tepat padanan dan mengeluarkan maklumat persatuan IP, alamat MAC dan port yang sepadan dari fail dari sumber yang berbeza.
