Giải thích về mảng trong Python!
Nếu bạn đang tìm hiểu về lập trình hoặc tìm hiểu về Python, thì bài viết này là dành cho bạn, mảng là một trong những cấu trúc dữ liệu được sử dụng nhiều nhất. Python đại diện cho mảng như thế nào? Làm cách nào chúng ta có thể thao tác mảng trong Python để giải quyết các vấn đề khác nhau? Đây là những gì chúng ta sẽ tìm hiểu trong bài viết này.
Máy tính lưu trữ thông tin như thế nào?
Như bạn đã biết, dạng thông tin cơ bản nhất trong máy tính bao gồm các bit thông tin. 8 bit của những thông tin này sau đó được nhóm lại để tạo thành cái mà chúng ta gọi là byte .
Vì máy tính có thể lưu trữ những khối byte rất lớn này nên chúng cần một cơ chế mới cho phép chúng đọc và ghi byte nhanh chóng, đây là lúc địa chỉ bộ nhớ phát huy tác dụng, giống như địa chỉ nhà riêng của bạn để phân biệt nơi bạn sống với hàng xóm, máy tính sử dụng địa chỉ bộ nhớ để phân biệt vị trí của các phần dữ liệu và thông tin khác nhau.
Điều đáng nói là máy tính cần thời gian truy cập O(1) để đến bất kỳ địa chỉ bộ nhớ nào, điều này có nghĩa là truy cập byte #5489637 cũng giống như truy cập byte #64.
Mảng là gì?
Một thực tế phổ biến trong các ngôn ngữ lập trình là sử dụng các biến để chỉ một địa chỉ trong bộ nhớ, ví dụ mã định danh X có thể chỉ byte #32.
Trong trường hợp chúng tôi muốn lưu trữ nhiều địa chỉ bộ nhớ, việc tạo nhiều mã định danh sẽ không hiệu quả và không thể mở rộng. Chúng tôi sẽ thích hơn nếu chúng tôi có một tên cho nhóm số nhận dạng và sử dụng các số để truy cập các số nhận dạng cụ thể. Biểu diễn như vậy là một mảng, nói cách khác, nó là biểu diễn của một nhóm các biến trong một phần liền kề của bộ nhớ máy tính.
Ví dụ, các chuỗi trong Python được lưu trữ theo cách này, giả sử bạn khai báo một biến mới với văn bản 'ví dụ' Python sẽ phân bổ:
2 byte (bộ nhớ cần thiết để lưu một ký tự Unicode) * 7 (số ký tự trong từ ví dụ) = 14 byte bộ nhớ liền kề để lưu biến này.
Mảng tham chiếu
Python sử dụng một loại mảng khác là mảng tham chiếu, để hiểu về chúng, hãy xem ví dụ này, giả sử bạn sở hữu một khách sạn và bạn có 50 phòng, bạn cần một cách để lưu tên của người ở trong phòng nào. một đại diện như sau:
để làm điều này Python phải tôn trọng điều kiện của không gian bộ nhớ liền kề để cấp phát. Nhưng làm thế nào để thực hiện điều này khi tên có độ dài khác nhau (độ dài khác nhau có nghĩa là yêu cầu không gian khác nhau)?
Một giải pháp sẽ là tìm độ dài của chuỗi lớn nhất và phân bổ đủ dung lượng bộ nhớ cho tất cả nhưng điều này sẽ không hiệu quả về bộ nhớ vì một số dung lượng sẽ bị lãng phí và điều gì sẽ xảy ra nếu một chuỗi mới xuất hiện hiện là chuỗi lớn nhất?
Để giải quyết vấn đề này, Python tạo ra một mảng các tham chiếu liền kề tới nhiều đối tượng, do đó, bây giờ mặc dù kích thước của từng đối tượng riêng lẻ có thể khác nhau nhưng bộ nhớ được sử dụng để lưu trữ địa chỉ bộ nhớ của nó là như nhau. Bằng cách này, Python đảm bảo thời gian truy cập liên tục đến các phần tử khác nhau của mảng. Chúng tôi gọi loại mảng này là mảng tham chiếu.
Để minh họa điều này, hãy xem hình ảnh này:
Danh sách và Bộ dữ liệu trong Python sử dụng loại mảng này để lưu trữ dữ liệu.
Lưu ý: Vì các mảng tham chiếu trỏ đến các tham chiếu, hãy cẩn thận khi thay đổi các giá trị tham chiếu vì bạn cũng có thể sửa đổi các giá trị trong Danh sách do nhầm lẫn. Ngoài ra khi tạo các bản sao, hãy chắc chắn rằng bạn biết sự khác biệt giữa Bản sao nông và Bản sao sâu .
Mảng nhỏ gọn
Trước đây chúng ta đã nói về Chuỗi và cách chúng ta lưu trữ chúng trong một mảng bộ nhớ liền kề, trên thực tế, chúng ta gọi mảng này là Mảng nhỏ gọn.
Một lợi thế của việc sử dụng các mảng nhỏ gọn so với các tham chiếu là không có thêm chi phí từ việc lưu trữ các tham chiếu bộ nhớ, chúng tôi lưu trữ trực tiếp dữ liệu chính. Một ưu điểm khác đáng nói đến là trong trường hợp sử dụng danh sách là mảng tham chiếu, Python không kiểm soát được nơi lưu trữ dữ liệu của bạn, mặc dù danh sách duy trì các tham chiếu đến vị trí của dữ liệu. Do cách thức hoạt động của phần cứng, sẽ hiệu quả hơn nếu dữ liệu của bạn ở gần nhau, nó có thể được sử dụng cho cùng một tính toán.
Bất chấp những ưu điểm này, đối với Danh sách và bộ dữ liệu, Python sử dụng mảng tham chiếu vì chúng thuận tiện khi sử dụng. Tuy nhiên, nếu bạn khăng khăng sử dụng một mảng nhỏ gọn, Python cung cấp cho bạn một mô-đun có tên là mảng cho phép bạn thực hiện điều này:
Tại đây, bạn nhận thấy rằng chúng tôi đã chuyển i đối số đầu tiên cho array. Bởi vì để tạo một mảng nhỏ gọn, chúng ta cần chỉ định loại để cấp phát bộ nhớ thích hợp. Đối với các loại dữ liệu khác, hãy kiểm tra bảng này:
Nếu bạn muốn tìm hiểu thêm về mô-đun mảng, hãy nhấp vào đây .
Một nhược điểm của mô-đun mảng là nó không hỗ trợ các kiểu dữ liệu do người dùng xác định. Các mảng nhỏ gọn với cấu trúc dữ liệu như vậy có thể được xác định bằng cách sử dụng mô-đun ctypes .
Mảng động
Khi tạo một mảng nhỏ gọn, chúng tôi chỉ định kích thước chính xác của mảng đó để máy tính biết bộ nhớ nào sẽ được phân bổ. Bởi vì nó cấp phát vùng nhớ lân cận cho các mảng khác.
Trong thực tế, không phải lúc nào chúng ta cũng biết kích thước của các mảng, chúng có thể mở rộng theo thời gian. Để khắc phục vấn đề này, Python cung cấp dưới dạng trừu tượng được gọi là Mảng động.
Sự trừu tượng hóa này sử dụng một thể hiện danh sách duy trì một mảng cơ bản có dung lượng lớn hơn độ dài của danh sách thực tế. Dung lượng bổ sung này giúp chúng tôi thêm ngày càng nhiều dữ liệu vào danh sách.
Cuối cùng, khi chúng tôi sử dụng hết dung lượng bổ sung, Dynamic Array sẽ yêu cầu một mảng mới lớn hơn và sao chép tất cả các phần tử sang mảng mới và hệ thống sẽ lấy lại không gian từ mảng cũ.
Danh sách Python dựa trên sự trừu tượng hóa này nhưng Bộ dữ liệu và Chuỗi là bất biến (không thể thay đổi) do đó không dựa trên điều này.
Cũng cần nhắc lại rằng mảng động không chỉ mở rộng về kích thước mà còn có thể co lại nếu chúng ta xóa các phần tử khỏi danh sách.
Danh sách & Bộ dữ liệu
Vì vậy, từ phân tích chúng tôi đã thực hiện trong phần trên, chúng tôi có thể chia các phương thức Lists & Tuples thành hai loại phương thức:
Các phương thức không thay đổi: các phương thức tồn tại trong cả bộ dữ liệu và danh sách và không thay đổi nội dung của chúng. Dưới đây là bảng các phương thức này và độ phức tạp về thời gian của chúng:
Các phương thức đột biến: các phương thức chỉ tồn tại trong danh sách khi chúng thay đổi cấu trúc và dữ liệu cơ bản của danh sách. Dưới đây là bảng các phương thức này và độ phức tạp về thời gian của chúng:
Chúng tôi không thảo luận ở đây tác dụng của từng phương thức (Nó trực quan và dễ dàng) nhưng bạn có thể tìm hiểu thêm về các danh sách và bộ dữ liệu trong Python .
mang đi
- Mảng tham chiếu lưu trữ các tham chiếu trong bộ nhớ mảng của chúng và sau đó truy cập các giá trị thực thông qua các tham chiếu.
- Mảng nhỏ gọn lưu trữ dữ liệu thực tế trong bộ nhớ liền kề.
- Mảng động là mảng tự động mở rộng và thu nhỏ tùy thuộc vào số lượng phần tử trong đó.
- Danh sách dựa trên mảng tham chiếu và mảng động.
- Các bộ dữ liệu dựa trên các mảng tham chiếu.
- Chuỗi dựa trên các mảng nhỏ gọn.
LinkedIn:https://www.linkedin.com/in/mohamed-aziz-belaweid/
GitHub:https://github.com/azayz
Đọc những câu chuyện khác của tôi:
REALM : Mô hình Ngôn ngữ Tăng cường Truy xuất Đào tạo trước Nhận dạng Cảm xúc Khuôn mặt, Hướng dẫn thực hành!Đăng ký và nhận thông báo bất cứ khi nào tôi đăng nội dung nào đó:

![Dù sao thì một danh sách được liên kết là gì? [Phần 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































