Python có cấp phát bộ nhớ tự động không?

Python không được biết đến là ngôn ngữ lập trình "nhanh". Tuy nhiên, theo kết quả Khảo sát nhà phát triển Stack Overflow năm 2020, Python là ngôn ngữ lập trình phổ biến thứ 2 sau JavaScript [như bạn có thể đoán]. Điều này phần lớn là do cú pháp siêu thân thiện và khả năng ứng dụng của nó cho mọi mục đích. Mặc dù Python không phải là ngôn ngữ nhanh nhất hiện có, nhưng khả năng đọc tuyệt vời của nó cùng với sự hỗ trợ cộng đồng vô song và tính sẵn có của thư viện đã khiến nó trở nên cực kỳ hấp dẫn để hoàn thành công việc bằng mã

Quản lý bộ nhớ Python đóng một vai trò trong sự phổ biến của nó, để. Làm thế nào vậy? . Bạn đã bao giờ nghe nói về trình quản lý bộ nhớ Python chưa? . Tuy nhiên, do tính đơn giản của nó, Python không cung cấp cho bạn nhiều quyền tự do trong việc quản lý việc sử dụng bộ nhớ, không giống như trong các ngôn ngữ như C++, nơi bạn có thể phân bổ và giải phóng bộ nhớ theo cách thủ công

Tuy nhiên, hiểu rõ về quản lý bộ nhớ Python là một khởi đầu tuyệt vời cho phép bạn viết mã hiệu quả hơn. Cuối cùng, bạn có thể thực thi nó như một thói quen có khả năng được áp dụng trong các ngôn ngữ lập trình khác mà bạn biết

Vậy chúng ta thu được gì từ việc viết mã hiệu quả về bộ nhớ?

  • Nó dẫn đến xử lý nhanh hơn và ít cần tài nguyên hơn, cụ thể là sử dụng bộ nhớ truy cập ngẫu nhiên [RAM]. Nhiều RAM khả dụng hơn thường có nghĩa là nhiều chỗ hơn cho bộ đệm, điều này sẽ giúp tăng tốc độ truy cập đĩa. Điều tuyệt vời khi viết mã hiệu quả về bộ nhớ là nó không nhất thiết yêu cầu bạn viết nhiều dòng mã hơn
  • Một lợi ích khác là nó ngăn ngừa rò rỉ bộ nhớ, một sự cố khiến mức sử dụng RAM liên tục tăng ngay cả khi các tiến trình bị tắt, cuối cùng dẫn đến hiệu suất thiết bị bị chậm hoặc suy giảm. Điều này là do không thể giải phóng bộ nhớ đã sử dụng sau khi quá trình kết thúc

Trong thế giới công nghệ, bạn có thể đã nghe nói rằng "hoàn thành tốt hơn là hoàn hảo". Tuy nhiên, giả sử bạn có hai nhà phát triển đã sử dụng Python để phát triển cùng một ứng dụng và họ đã hoàn thành ứng dụng đó trong cùng một khoảng thời gian. Một trong số họ đã viết mã hiệu quả hơn về bộ nhớ dẫn đến ứng dụng hoạt động nhanh hơn. Bạn muốn chọn ứng dụng chạy mượt mà hay ứng dụng chạy chậm hơn rõ rệt?

Đây là những gì bạn sẽ học trong hướng dẫn

Bộ nhớ được quản lý trong Python như thế nào?

Theo tài liệu Python [3. 9. 0] để quản lý bộ nhớ, quản lý bộ nhớ của Python liên quan đến một đống riêng được sử dụng để lưu trữ các đối tượng và cấu trúc dữ liệu của chương trình của bạn. Ngoài ra, hãy nhớ rằng chính trình quản lý bộ nhớ Python xử lý hầu hết các công việc bẩn thỉu liên quan đến quản lý bộ nhớ để bạn chỉ có thể tập trung vào mã của mình

Phân bổ bộ nhớ Python

Mọi thứ trong Python đều là đối tượng. Để các đối tượng này hữu ích, chúng cần được lưu trữ trong bộ nhớ để có thể truy cập. Trước khi chúng có thể được lưu trữ trong bộ nhớ, trước tiên một đoạn bộ nhớ phải được phân bổ hoặc chỉ định cho mỗi người trong số chúng

Ở mức thấp nhất, bộ cấp phát bộ nhớ thô của Python trước tiên sẽ đảm bảo rằng có sẵn dung lượng trong heap riêng để lưu trữ các đối tượng này. Nó thực hiện điều này bằng cách tương tác với trình quản lý bộ nhớ của hệ điều hành của bạn. Hãy xem nó như chương trình Python của bạn yêu cầu hệ điều hành của bạn cung cấp một đoạn bộ nhớ để hoạt động với

Ở cấp độ tiếp theo, một số bộ cấp phát dành riêng cho đối tượng hoạt động trên cùng một đống và thực hiện các chính sách quản lý riêng biệt tùy thuộc vào loại đối tượng. Như bạn có thể đã biết, một số ví dụ về kiểu đối tượng là chuỗi và số nguyên. Mặc dù các chuỗi và số nguyên có thể không khác nhau lắm nếu xét đến lượng thời gian chúng ta cần để nhận biết và ghi nhớ chúng, nhưng chúng được máy tính xử lý rất khác nhau. Điều này là do máy tính cần các yêu cầu lưu trữ khác nhau và cân bằng tốc độ cho số nguyên so với chuỗi

Một điều cuối cùng bạn nên biết về cách quản lý heap của Python là bạn không có quyền kiểm soát nó. Bây giờ bạn có thể tự hỏi, làm thế nào để chúng ta viết mã hiệu quả về bộ nhớ nếu chúng ta có quá ít quyền kiểm soát đối với việc quản lý bộ nhớ của Python?

tĩnh so với. Cấp phát bộ nhớ động

Bây giờ bạn đã hiểu cấp phát bộ nhớ là gì, đã đến lúc làm quen với hai loại cấp phát bộ nhớ, cụ thể là tĩnh và động, đồng thời phân biệt giữa hai loại này

Cấp phát bộ nhớ tĩnh

  • Giống như từ "tĩnh" gợi ý, các biến được cấp phát tĩnh là vĩnh viễn, nghĩa là chúng cần được cấp phát trước và tồn tại miễn là chương trình chạy
  • Bộ nhớ được phân bổ trong thời gian biên dịch hoặc trước khi thực hiện chương trình
  • Được triển khai bằng cấu trúc dữ liệu ngăn xếp, nghĩa là các biến được lưu trữ trong bộ nhớ ngăn xếp
  • Bộ nhớ đã được phân bổ không thể được sử dụng lại, do đó không thể sử dụng lại bộ nhớ

Cấp phát bộ nhớ động

  • Giống như từ "động" gợi ý, các biến được cấp phát động không cố định và có thể được cấp phát khi chương trình đang chạy
  • Bộ nhớ được phân bổ trong thời gian chạy hoặc trong khi thực hiện chương trình
  • Được triển khai bằng cấu trúc dữ liệu heap, nghĩa là các biến được lưu trữ trong bộ nhớ heap
  • Bộ nhớ đã được phân bổ có thể được giải phóng và sử dụng lại

Một lợi thế của việc cấp phát bộ nhớ động trong Python là chúng ta không cần phải lo lắng trước về việc chúng ta cần bao nhiêu bộ nhớ cho chương trình của mình. Một ưu điểm khác là thao tác cấu trúc dữ liệu có thể được thực hiện tự do mà không phải lo lắng về nhu cầu cấp phát bộ nhớ cao hơn nếu cấu trúc dữ liệu mở rộng

Tuy nhiên, do việc cấp phát bộ nhớ động được thực hiện trong quá trình thực thi chương trình nên sẽ mất nhiều thời gian hơn để hoàn thành. Ngoài ra, bộ nhớ đã được cấp phát cần được giải phóng sau khi sử dụng xong. Nếu không, các sự cố như rò rỉ bộ nhớ có thể xảy ra

Chúng tôi đã xem xét hai loại cấu trúc bộ nhớ ở trên - bộ nhớ heap và bộ nhớ ngăn xếp. Hãy cùng tìm hiểu sâu hơn về chúng

ngăn xếp bộ nhớ

Tất cả các phương thức và các biến của chúng được lưu trữ trong bộ nhớ ngăn xếp. Hãy nhớ rằng bộ nhớ ngăn xếp được phân bổ trong thời gian biên dịch?

Khi một phương thức được gọi trong Python, một khung ngăn xếp được cấp phát. Khung ngăn xếp này sẽ xử lý tất cả các biến của phương thức. Sau khi phương thức được trả về, khung ngăn xếp sẽ tự động bị hủy

Lưu ý rằng khung ngăn xếp cũng chịu trách nhiệm đặt phạm vi cho các biến của phương thức

bộ nhớ đống

Tất cả các đối tượng và biến thể hiện được lưu trữ trong bộ nhớ heap. Khi một biến được tạo trong Python, nó được lưu trữ trong một vùng riêng tư, sau đó sẽ cho phép phân bổ và hủy phân bổ.  

Bộ nhớ heap cho phép các biến này được truy cập trên toàn cầu bằng tất cả các phương thức của chương trình của bạn. Sau khi biến được trả về, trình thu gom rác của Python sẽ hoạt động, chúng tôi sẽ đề cập đến hoạt động của nó sau

Bây giờ hãy xem cấu trúc bộ nhớ của Python

Python có ba cấp độ khác nhau khi nói đến cấu trúc bộ nhớ của nó

Chúng ta sẽ bắt đầu với thứ lớn nhất trong số chúng - đấu trường

đấu trường

Hãy tưởng tượng một chiếc bàn với 64 cuốn sách bao phủ toàn bộ bề mặt của nó. Mặt trên của bàn đại diện cho một đấu trường có kích thước cố định là 256KiB được phân bổ trong đống [Lưu ý rằng KiB khác với KB, nhưng bạn có thể cho rằng chúng giống nhau theo cách giải thích này]. Một đấu trường đại diện cho khối bộ nhớ lớn nhất có thể

Cụ thể hơn, đấu trường là ánh xạ bộ nhớ được sử dụng bởi trình cấp phát Python, pymalloc, được tối ưu hóa cho các đối tượng nhỏ  [nhỏ hơn hoặc bằng 512 byte]. Các đấu trường chịu trách nhiệm phân bổ bộ nhớ và do đó các cấu trúc tiếp theo không phải làm điều đó nữa

Đấu trường này sau đó có thể được chia nhỏ thành 64 nhóm, đây là cấu trúc bộ nhớ lớn nhất tiếp theo

hồ bơi

Quay trở lại ví dụ về bàn làm việc, các cuốn sách đại diện cho tất cả các nhóm trong một đấu trường

Mỗi nhóm thường có kích thước cố định là 4Kb và có thể có ba trạng thái có thể

  • Trống rỗng. Nhóm trống và do đó có sẵn để phân bổ
  • Đã sử dụng. Nhóm chứa các đối tượng khiến nó không trống cũng không đầy
  • Đầy. Nhóm đã đầy và do đó không có sẵn cho bất kỳ phân bổ nào nữa

Lưu ý rằng kích thước của nhóm phải tương ứng với kích thước trang bộ nhớ mặc định của hệ điều hành của bạn

Một nhóm sau đó được chia thành nhiều khối, đó là những cấu trúc bộ nhớ nhỏ nhất

khối

Quay trở lại ví dụ về bàn làm việc, các trang trong mỗi cuốn sách đại diện cho tất cả các khối trong một nhóm

Không giống như đấu trường và hồ bơi, kích thước của một khối không cố định. Kích thước của một khối nằm trong khoảng từ 8 đến 512 byte và phải là bội số của tám

Mỗi khối chỉ có thể lưu trữ một đối tượng Python có kích thước nhất định và có ba trạng thái có thể

  • nguyên sơ. Chưa được phân bổ
  • Tự do. Đã được phân bổ nhưng đã được phát hành và sẵn sàng để phân bổ
  • được phân bổ. đã được phân bổ

Lưu ý rằng ba cấp độ khác nhau của cấu trúc bộ nhớ [đấu trường, nhóm và khối] mà chúng tôi đã thảo luận ở trên dành riêng cho các đối tượng Python nhỏ hơn. Các đối tượng lớn được chuyển hướng đến bộ cấp phát C tiêu chuẩn trong Python, đây sẽ là một nội dung tốt để đọc vào một ngày khác

Bộ sưu tập rác Python

Thu gom rác là một quá trình được thực hiện bởi một chương trình để giải phóng bộ nhớ đã cấp phát trước đó cho một đối tượng không còn được sử dụng. Bạn có thể coi phân bổ rác như tái chế hoặc tái sử dụng bộ nhớ

Ngày trước, các lập trình viên phải phân bổ và giải phóng bộ nhớ theo cách thủ công. Quên giải phóng bộ nhớ sẽ dẫn đến rò rỉ bộ nhớ, dẫn đến giảm hiệu suất thực thi. Tồi tệ hơn, việc cấp phát và giải phóng bộ nhớ thủ công thậm chí có khả năng dẫn đến việc vô tình ghi đè lên bộ nhớ, điều này có thể khiến chương trình bị sập hoàn toàn

Trong Python, việc thu gom rác được thực hiện tự động và do đó giúp bạn đỡ phải đau đầu hơn trong việc quản lý cấp phát và giải phóng bộ nhớ theo cách thủ công. Cụ thể, Python sử dụng tính năng đếm tham chiếu kết hợp với bộ sưu tập rác thế hệ để giải phóng bộ nhớ không sử dụng. Lý do tại sao việc đếm tham chiếu một mình không đủ đối với Python vì nó không dọn sạch hiệu quả các tham chiếu theo chu kỳ lơ lửng.  

Chu trình thu gom rác thế hệ bao gồm các bước sau -

  1. Python khởi tạo "danh sách loại bỏ" cho các đối tượng không sử dụng
  2. Một thuật toán được chạy để phát hiện các chu kỳ tham chiếu
  3. Nếu một đối tượng bị thiếu các tham chiếu bên ngoài, nó sẽ được đưa vào danh sách loại bỏ
  4. Giải phóng cấp phát bộ nhớ cho các đối tượng trong danh sách loại bỏ

Để tìm hiểu thêm về thu gom rác trong Python, bạn có thể xem Bộ sưu tập rác Python của chúng tôi. Bài đăng Hướng dẫn dành cho nhà phát triển

Giám sát các vấn đề về bộ nhớ Python

Mặc dù mọi người đều yêu thích Python, nhưng nó không tránh khỏi các vấn đề về bộ nhớ. Có nhiều lý do có thể

Theo Trăn Trối [3. 9. 0] để quản lý bộ nhớ, trình quản lý bộ nhớ Python không nhất thiết phải giải phóng bộ nhớ trở lại hệ điều hành của bạn. Trong tài liệu đã nêu rõ rằng "trong một số trường hợp nhất định, trình quản lý bộ nhớ Python có thể không kích hoạt các hành động thích hợp, như thu gom rác, nén bộ nhớ hoặc các biện pháp phòng ngừa khác. "

Do đó, người ta có thể phải giải phóng bộ nhớ một cách rõ ràng bằng Python. Một cách để làm điều này là buộc trình thu gom rác Python giải phóng bộ nhớ không sử dụng bằng cách sử dụng mô-đun gc. Người ta chỉ cần chạy gc. coll[] để làm như vậy. Tuy nhiên, điều này chỉ mang lại những lợi ích đáng chú ý khi thao tác với một số lượng rất lớn các đối tượng.

Ngoài bản chất thỉnh thoảng có sai sót của trình thu gom rác Python, đặc biệt là khi xử lý các tập dữ liệu lớn, một số thư viện Python cũng được biết là nguyên nhân gây rò rỉ bộ nhớ. Pandas, ví dụ, là một trong những công cụ như vậy trên radar. Cân nhắc xem xét tất cả các vấn đề liên quan đến bộ nhớ trong kho lưu trữ GitHub chính thức của gấu trúc

Một lý do rõ ràng có thể lọt qua cả cặp mắt tinh tường của những người đánh giá mã là có những đối tượng lớn còn sót lại trong mã không được phát hành. Cùng một lưu ý, cấu trúc dữ liệu phát triển vô hạn là một nguyên nhân gây lo ngại khác. Ví dụ: cấu trúc dữ liệu từ điển đang phát triển không có giới hạn kích thước cố định

Một cách để giải quyết cấu trúc dữ liệu ngày càng tăng là chuyển đổi từ điển thành danh sách nếu có thể và đặt kích thước tối đa cho danh sách. Mặt khác, chỉ cần đặt giới hạn cho kích thước từ điển và xóa giới hạn đó bất cứ khi nào đạt đến giới hạn

Bây giờ bạn có thể tự hỏi, làm cách nào để phát hiện các vấn đề về bộ nhớ ngay từ đầu? . Ngoài ra, nhiều mô-đun Python hữu ích có thể giúp bạn theo dõi và theo dõi các vấn đề về bộ nhớ. Hãy xem xét các tùy chọn của chúng tôi, bắt đầu với các công cụ APM

Công cụ giám sát hiệu suất ứng dụng [APM]

Vậy chính xác Giám sát hiệu suất ứng dụng là gì và nó giúp theo dõi các vấn đề về bộ nhớ như thế nào?

Dựa trên các báo cáo được tạo bởi các công cụ APM, bạn sẽ có thể có ý tưởng chung về cách chương trình của bạn đang hoạt động. Vì bạn có thể nhận và theo dõi các chỉ số hiệu suất theo thời gian thực, nên bạn có thể thực hiện hành động ngay lập tức đối với bất kỳ vấn đề nào phát hiện được. Khi bạn đã thu hẹp các khu vực có thể có trong chương trình của mình, vốn có thể là thủ phạm gây ra các vấn đề về bộ nhớ, thì bạn có thể đi sâu vào mã và thảo luận về mã đó với những người đóng góp mã khác để xác định thêm các dòng mã cụ thể cần được sửa.

Truy tìm gốc rễ của các vấn đề rò rỉ bộ nhớ có thể là một nhiệm vụ khó khăn. Sửa nó là một cơn ác mộng khác vì bạn cần thực sự hiểu mã của mình. Nếu bạn từng thấy mình ở vị trí đó, thì không cần tìm đâu xa vì ScoutAPM là một công cụ APM thành thạo có thể phân tích và tối ưu hóa hiệu suất ứng dụng của bạn một cách xây dựng. ScoutAPM cung cấp cho bạn thông tin chi tiết theo thời gian thực để bạn có thể nhanh chóng xác định và giải quyết các vấn đề trước khi khách hàng của bạn có thể phát hiện ra chúng

Mô-đun hồ sơ

Có nhiều mô-đun Python tiện dụng mà bạn có thể sử dụng để giải quyết các vấn đề về bộ nhớ, cho dù đó là rò rỉ bộ nhớ hay chương trình của bạn bị lỗi do sử dụng bộ nhớ quá mức. Hai trong số những cái được đề xuất là

Lưu ý rằng chỉ có mô-đun tracemalloc được tích hợp sẵn, vì vậy hãy đảm bảo cài đặt mô-đun kia trước nếu bạn muốn sử dụng nó

theo dõi

Theo Trăn Trối [3. 9. 0] cho tracemalloc, sử dụng mô-đun này có thể cung cấp cho bạn thông tin sau

  • Traceback nơi một đối tượng đã được phân bổ
  • Thống kê về các khối bộ nhớ được phân bổ cho mỗi tên tệp và mỗi số dòng. tổng kích thước, số lượng và kích thước trung bình của các khối bộ nhớ được phân bổ
  • Tính toán sự khác biệt giữa hai ảnh chụp nhanh để phát hiện rò rỉ bộ nhớ

Bước đầu tiên được khuyến nghị mà bạn nên thực hiện để xác định nguồn gốc của sự cố bộ nhớ là trước tiên hãy hiển thị các tệp phân bổ nhiều bộ nhớ nhất. Bạn có thể dễ dàng thực hiện việc này bằng ví dụ mã đầu tiên được hiển thị trong tài liệu.  

Tuy nhiên, điều này không có nghĩa là các tệp phân bổ một lượng bộ nhớ nhỏ sẽ không phát triển vô hạn để gây rò rỉ bộ nhớ trong tương lai

memory_profiler

Mô-đun này là một mô-đun thú vị. Tôi đã làm việc với điều này và nó là một sở thích cá nhân vì nó cung cấp tùy chọn chỉ cần thêm trình trang trí @profile vào bất kỳ chức năng nào mà bạn muốn điều tra. Đầu ra được đưa ra là kết quả cũng rất dễ hiểu

Một lý do khác khiến tôi yêu thích mô-đun này là mô-đun này cho phép bạn vẽ biểu đồ sử dụng bộ nhớ dựa trên thời gian. Đôi khi, bạn chỉ cần kiểm tra nhanh xem liệu mức sử dụng bộ nhớ có tiếp tục tăng vô hạn hay không. Đây là giải pháp hoàn hảo cho điều đó vì bạn không cần phải lập hồ sơ bộ nhớ theo từng dòng để xác nhận rằng. Bạn có thể chỉ cần quan sát biểu đồ được vẽ sau khi để trình hồ sơ chạy trong một khoảng thời gian nhất định. Đây là một ví dụ về biểu đồ được xuất ra -

Theo mô tả trong tài liệu về trình biên dịch bộ nhớ, mô-đun Python này dùng để theo dõi mức tiêu thụ bộ nhớ của một quy trình cũng như phân tích từng dòng tương tự cho các chương trình Python. Nó là một mô-đun Python thuần túy phụ thuộc vào thư viện psutil

Tôi khuyên bạn nên đọc blog Phương tiện này để khám phá thêm về cách sử dụng trình lập hồ sơ bộ nhớ. Ở đó, bạn cũng sẽ học cách sử dụng một mô-đun Python khác, muppy [mô-đun mới nhất là muppy3]

Các phương pháp hay nhất để cải thiện hiệu suất mã Python

Đủ tất cả các chi tiết về quản lý bộ nhớ. Bây giờ chúng ta hãy khám phá một số thói quen tốt khi viết mã Python hiệu quả về bộ nhớ

Tận dụng các thư viện Python và các hàm tích hợp

Vâng, đây là một thói quen tốt có thể thường bị bỏ qua. Python có cộng đồng hỗ trợ vô song và điều này được phản ánh bởi các thư viện Python phong phú có sẵn cho mọi mục đích, từ lệnh gọi API đến khoa học dữ liệu

Nếu có một thư viện Python cho phép bạn làm điều tương tự như những gì bạn đã triển khai, điều bạn có thể làm là so sánh hiệu suất mã của mình khi sử dụng thư viện với khi sử dụng mã tùy chỉnh của bạn. Rất có thể, các thư viện Python [đặc biệt là những thư viện phổ biến] sẽ tiết kiệm bộ nhớ hơn mã của bạn vì chúng liên tục được cải thiện dựa trên phản hồi của cộng đồng. Bạn muốn dựa vào mã được tạo ra trong một đêm hay mã đã được cải tiến nghiêm ngặt trong một thời gian dài?

Hơn hết, các thư viện Python sẽ giúp bạn tiết kiệm nhiều dòng mã, vậy tại sao không?

Không sử dụng "+" để nối chuỗi

Tại một số thời điểm, tất cả chúng ta đều mắc lỗi khi nối các chuỗi bằng toán tử "+" vì nó có vẻ quá dễ dàng

Lưu ý rằng các chuỗi là bất biến. Do đó, mỗi khi bạn thêm một phần tử vào chuỗi bằng toán tử "+", Python phải tạo một chuỗi mới với cấp phát bộ nhớ mới. Với các chuỗi dài hơn, sự kém hiệu quả về bộ nhớ của mã sẽ trở nên rõ rệt hơn

Vì vậy, thay vì sử dụng toán tử "+" để nối các chuỗi lại với nhau, bạn nên cân nhắc sử dụng. tham gia[] phương pháp, str. định dạng[] hoặc %-định dạng

Sử dụng itertools để lặp hiệu quả

Vòng lặp là một phần thiết yếu của công cụ tự động hóa. Khi chúng ta tiếp tục sử dụng các vòng lặp ngày càng nhiều, cuối cùng chúng ta sẽ thấy mình phải sử dụng các vòng lặp lồng nhau, được biết là không hiệu quả do độ phức tạp cao trong thời gian chạy của chúng.

Đây là lúc mô-đun itertools ra tay giải cứu. Theo tài liệu về itertools của Python, "Mô-đun chuẩn hóa một bộ cốt lõi gồm các công cụ nhanh, hiệu quả về bộ nhớ, hữu ích khi sử dụng riêng lẻ hoặc kết hợp. Cùng với nhau, họ có thể xây dựng các công cụ chuyên dụng một cách ngắn gọn và hiệu quả bằng Python thuần túy. "

Nói cách khác, mô-đun itertools cho phép lặp hiệu quả bộ nhớ bằng cách loại bỏ các vòng lặp không cần thiết. Thật thú vị, mô-đun itertools được gọi là đá quý vì nó cho phép tạo ra các giải pháp tinh tế cho vô số vấn đề

Tôi khá chắc chắn rằng bạn sẽ làm việc với ít nhất một vòng lặp trong đoạn mã tiếp theo của mình, vì vậy hãy thử triển khai itertools sau đó

Tóm tắt và Kết thúc Suy nghĩ

Áp dụng thói quen quản lý bộ nhớ Python tốt không dành cho lập trình viên thông thường. Nếu bạn thường làm với các tập lệnh đơn giản, thì bạn hoàn toàn không gặp phải các vấn đề liên quan đến bộ nhớ. Nhờ phần cứng và phần mềm tiếp tục phát triển nhanh chóng khi bạn đọc điều này, mô hình cơ sở của bất kỳ thiết bị nào ngoài kia, bất kể thương hiệu của chúng, sẽ chạy tốt các chương trình hàng ngày. Nhu cầu về mã hiệu quả về bộ nhớ chỉ bắt đầu xuất hiện khi bạn bắt đầu làm việc trên một cơ sở mã lớn, đặc biệt là đối với sản xuất, trong đó hiệu suất là yếu tố then chốt

Tuy nhiên, điều này không có nghĩa là quản lý bộ nhớ trong Python là một khái niệm khó nắm bắt, cũng không có nghĩa là nó không quan trọng. Điều này là do sự nhấn mạnh vào hiệu suất ứng dụng đang tăng lên mỗi ngày. Một ngày nào đó, nó sẽ không chỉ là một câu hỏi đơn thuần về "xong" nữa. Thay vào đó, các nhà phát triển sẽ cạnh tranh để đưa ra một giải pháp không chỉ có khả năng giải quyết thành công nhu cầu của khách hàng mà còn thực hiện nó với tốc độ chóng mặt và nguồn lực tối thiểu

Python có quản lý bộ nhớ không?

Quản lý bộ nhớ cho mã Python của bạn được xử lý bởi ứng dụng Python. Các thuật toán và cấu trúc mà ứng dụng Python sử dụng để quản lý bộ nhớ là trọng tâm của bài viết này

Python sử dụng cấp phát bộ nhớ tĩnh hay động?

Một lợi thế của cấp phát bộ nhớ động trong Python là chúng ta không cần phải lo lắng trước về việc cần bao nhiêu bộ nhớ cho chương trình của mình. Một ưu điểm khác là thao tác cấu trúc dữ liệu có thể được thực hiện tự do mà không phải lo lắng về nhu cầu cấp phát bộ nhớ cao hơn nếu cấu trúc dữ liệu mở rộng.

Python có phân bổ trên heap hoặc stack không?

Phân bổ bộ nhớ trong Python . stack memory and all the values objects are stored in a private heap.

Python có lưu trữ dữ liệu trong bộ nhớ không?

Python sử dụng thuật toán thu gom rác [gọi là Garbage Collector] để giữ cho bộ nhớ Heap sạch sẽ và loại bỏ các đối tượng không cần thiết nữa. Bạn không cần phải loay hoay với Heap, nhưng tốt hơn hết là bạn nên hiểu cách Python quản lý Heap vì hầu hết dữ liệu của bạn được lưu trữ trong phần này của bộ nhớ.

Chủ Đề