Hướng dẫn what is max length in python? - chiều dài tối đa trong python là gì?

9 nhân vật nhóm trên hệ thống 64 bit trên CPython 3.10.

Đó chỉ là khi chuỗi của bạn chỉ được tạo thành từ các ký tự ASCII. Độ dài tối đa có thể nhỏ hơn tùy thuộc vào những ký tự mà chuỗi chứa do cách CPython thực hiện các chuỗi:

  • 9,223,372,036,854,775,758 ký tự nếu chuỗi của bạn chỉ có các ký tự ASCII (U+00 đến U+7F) hoặc
  • 9,223,372,036,854,775,734 ký tự nếu chuỗi của bạn chỉ có các ký tự và ký tự ASCII từ khối Unicode bổ sung Latin-1 (U+80 đến U+FF) hoặc
  • 4.611.686,018,427,387,866 ký tự nếu chuỗi của bạn chỉ chứa các ký tự trong mặt phẳng đa ngôn ngữ cơ bản (ví dụ: nếu nó chứa các chữ cái cyrillic nhưng không có cảm xúc, tức là ____10 đến
    /* Largest positive value of type Py_ssize_t. */
    #define PY_SSIZE_T_MAX ((Py_ssize_t)(((size_t)-1)>>1))
    
    1) hoặc
  • 2,305,843,009,213,693,932 ký tự nếu chuỗi của bạn có thể chứa ít nhất một biểu tượng cảm xúc (chính thức hơn, nếu nó có thể chứa một ký tự bên ngoài mặt phẳng đa ngôn ngữ cơ bản, tức là
    /* Largest positive value of type Py_ssize_t. */
    #define PY_SSIZE_T_MAX ((Py_ssize_t)(((size_t)-1)>>1))
    
    2 trở lên)

Trên một hệ thống 32 bit, khoảng 2 tỷ hoặc 500 triệu ký tự. Nếu bạn không biết bạn đang sử dụng hệ thống 64 bit hay 32 bit hay điều đó có nghĩa là gì, có lẽ bạn đang sử dụng hệ thống 64 bit.


Chuỗi Python có chiều dài-prefix, do đó chiều dài của chúng bị giới hạn bởi kích thước của số nguyên giữ chiều dài của chúng và lượng bộ nhớ có sẵn trên hệ thống của bạn. Kể từ PEP 353, Python sử dụng

/* Largest positive value of type Py_ssize_t. */
#define PY_SSIZE_T_MAX ((Py_ssize_t)(((size_t)-1)>>1))
3 làm loại dữ liệu để lưu trữ độ dài của container.
/* Largest positive value of type Py_ssize_t. */
#define PY_SSIZE_T_MAX ((Py_ssize_t)(((size_t)-1)>>1))
3 được định nghĩa là cùng kích thước với
/* Largest positive value of type Py_ssize_t. */
#define PY_SSIZE_T_MAX ((Py_ssize_t)(((size_t)-1)>>1))
5 của trình biên dịch nhưng đã ký. Trên hệ thống 64 bit,
/* Largest positive value of type Py_ssize_t. */
#define PY_SSIZE_T_MAX ((Py_ssize_t)(((size_t)-1)>>1))
5 là 64. 1 bit cho dấu hiệu có nghĩa là bạn có 63 bit cho số lượng thực tế, có nghĩa là chuỗi cpython không thể lớn hơn 2⁶³ - 1 byte hoặc khoảng 9 triệu TB (8EIB). RAM này sẽ tiêu tốn của bạn khoảng 40 tỷ đô la nếu chúng tôi nhân giá hôm nay khoảng 4 đô la/GB thêm 9 tỷ. Trên các hệ thống 32 bit (rất hiếm trong những ngày này), nó là 2³¹ - 1 byte hoặc 2GIB.2⁶³ - 1 bytes or around 9 million TB (8EiB). This much RAM would cost you around 40 billion dollars if we multiply today's price of around $4/GB by 9 billion. On 32-bit systems (which are rare these days), it's 2³¹ - 1 bytes or 2GiB.

CPython sẽ sử dụng 1, 2 hoặc 4 byte trên mỗi ký tự, tùy thuộc vào số lượng byte cần mã hóa ký tự "dài nhất" trong chuỗi của bạn. Vì vậy, ví dụ nếu bạn có một chuỗi như

/* Largest positive value of type Py_ssize_t. */
#define PY_SSIZE_T_MAX ((Py_ssize_t)(((size_t)-1)>>1))
7, mỗi ____ 18, mỗi người lấy 1 byte để lưu trữ, nhưng nếu bạn có một chuỗi như
/* Largest positive value of type Py_ssize_t. */
#define PY_SSIZE_T_MAX ((Py_ssize_t)(((size_t)-1)>>1))
9 thì tất cả các ____ 18 sẽ mất 4 byte. Các chuỗi 1 byte-per-saracter cũng sẽ sử dụng 48 hoặc 72 byte siêu dữ liệu và 2 hoặc 4 byte trên mỗi ký tự sẽ lấy 72 byte cho siêu dữ liệu. Mỗi chuỗi cũng có một ký tự phụ ở cuối để chấm dứt null, vì vậy chuỗi trống thực sự là 49 byte.

Khi bạn phân bổ một chuỗi với

    struct_size = sizeof(PyCompactUnicodeObject);
    if (maxchar < 128) {
        // [...]
        struct_size = sizeof(PyASCIIObject);
    }
1 (xem tài liệu) trong CPython, nó sẽ thực hiện kiểm tra này:

    /* Ensure we won't overflow the size. */
    // [...]
    if (size > ((PY_SSIZE_T_MAX - struct_size) / char_size - 1))
        return PyErr_NoMemory();

    struct_size = sizeof(PyCompactUnicodeObject);
    if (maxchar < 128) {
        // [...]
        struct_size = sizeof(PyASCIIObject);
    }
2 ở đâu

/* Largest positive value of type Py_ssize_t. */
#define PY_SSIZE_T_MAX ((Py_ssize_t)(((size_t)-1)>>1))

được đúc

    struct_size = sizeof(PyCompactUnicodeObject);
    if (maxchar < 128) {
        // [...]
        struct_size = sizeof(PyASCIIObject);
    }
3 vào
/* Largest positive value of type Py_ssize_t. */
#define PY_SSIZE_T_MAX ((Py_ssize_t)(((size_t)-1)>>1))
5 (một loại được xác định bởi trình biên dịch C, số nguyên không dấu 64 bit trên hệ thống 64 bit) khiến nó quấn quanh giá trị lớn nhất có thể của nó, 2⁶⁴-1 và sau đó chuyển đổi nó bằng 1 ( do đó, bit dấu là
    struct_size = sizeof(PyCompactUnicodeObject);
    if (maxchar < 128) {
        // [...]
        struct_size = sizeof(PyASCIIObject);
    }
5) khiến nó trở thành 2⁶³-1 và chuyển nó thành loại
/* Largest positive value of type Py_ssize_t. */
#define PY_SSIZE_T_MAX ((Py_ssize_t)(((size_t)-1)>>1))
3.

    struct_size = sizeof(PyCompactUnicodeObject);
    if (maxchar < 128) {
        // [...]
        struct_size = sizeof(PyASCIIObject);
    }
7 chỉ là một chút chi phí cho siêu dữ liệu của đối tượng
    struct_size = sizeof(PyCompactUnicodeObject);
    if (maxchar < 128) {
        // [...]
        struct_size = sizeof(PyASCIIObject);
    }
8, 48 hoặc 72, nó được đặt sớm hơn trong hàm

    struct_size = sizeof(PyCompactUnicodeObject);
    if (maxchar < 128) {
        // [...]
        struct_size = sizeof(PyASCIIObject);
    }

    struct_size = sizeof(PyCompactUnicodeObject);
    if (maxchar < 128) {
        // [...]
        struct_size = sizeof(PyASCIIObject);
    }
9 là 1, 2 hoặc 4 và vì vậy chúng tôi có

>>> ((2**63 - 1) - 72) // 4 - 1
2305843009213693932

Tất nhiên có khả năng các chuỗi Python thực tế bị giới hạn bởi một số phần khác của Python mà tôi không biết, nhưng ít nhất bạn có thể phân bổ một chuỗi mới có kích thước đó, giả sử bạn có thể lấy tay vào 9 exabyte của ram.

Xem thảo luận

Cải thiện bài viết

Lưu bài viết

  • Đọc
  • Bàn luận
  • Xem thảo luận

    Cải thiện bài viết

    Lưu bài viết

    Đọc

    Bàn luận
    This is the brute method in which we perform this task. In this, we run a loop to keep a memory of longest string length and return the string which has max length in list.

    Đôi khi, trong khi làm việc với danh sách Python, chúng ta có thể gặp vấn đề trong đó chúng ta nhận được các chuỗi dưới dạng các yếu tố và muốn tính toán chuỗi có độ dài tối đa. Loại vấn đề này có thể có các ứng dụng trong nhiều lĩnh vực. Hãy để thảo luận về những cách nhất định trong đó vấn đề này có thể được giải quyết.

    Phương pháp số 1: Sử dụng loopthis là phương pháp vũ phu trong đó chúng tôi thực hiện nhiệm vụ này. Trong đó, chúng tôi chạy một vòng lặp để giữ bộ nhớ có độ dài chuỗi dài nhất và trả về chuỗi có độ dài tối đa trong danh sách.

    >>> ((2**63 - 1) - 72) // 4 - 1
    2305843009213693932
    
    0
    >>> ((2**63 - 1) - 72) // 4 - 1
    2305843009213693932
    
    1
    >>> ((2**63 - 1) - 72) // 4 - 1
    2305843009213693932
    
    2
    >>> ((2**63 - 1) - 72) // 4 - 1
    2305843009213693932
    
    3
    >>> ((2**63 - 1) - 72) // 4 - 1
    2305843009213693932
    
    4
    >>> ((2**63 - 1) - 72) // 4 - 1
    2305843009213693932
    
    5
    >>> ((2**63 - 1) - 72) // 4 - 1
    2305843009213693932
    
    4
    >>> ((2**63 - 1) - 72) // 4 - 1
    2305843009213693932
    
    7
    >>> ((2**63 - 1) - 72) // 4 - 1
    2305843009213693932
    
    4
    >>> ((2**63 - 1) - 72) // 4 - 1
    2305843009213693932
    
    9
    >>> ((2**63 - 1) - 72) // 4 - 1
    2305843009213693932
    
    4
    The original list : ['gfg', 'is', 'best', 'for', 'geeks']
    Maximum length string is : geeks
    
    1
    The original list : ['gfg', 'is', 'best', 'for', 'geeks']
    Maximum length string is : geeks
    
    2

    The original list : ['gfg', 'is', 'best', 'for', 'geeks']
    Maximum length string is : geeks
    
    3
    The original list : ['gfg', 'is', 'best', 'for', 'geeks']
    Maximum length string is : geeks
    
    4
    The original list : ['gfg', 'is', 'best', 'for', 'geeks']
    Maximum length string is : geeks
    
    5
    The original list : ['gfg', 'is', 'best', 'for', 'geeks']
    Maximum length string is : geeks
    
    6
        struct_size = sizeof(PyCompactUnicodeObject);
        if (maxchar < 128) {
            // [...]
            struct_size = sizeof(PyASCIIObject);
        }
    
    8
    The original list : ['gfg', 'is', 'best', 'for', 'geeks']
    Maximum length string is : geeks
    
    8

    The original list : ['gfg', 'is', 'best', 'for', 'geeks']
    Maximum length string is : geeks
    
    9
    >>> ((2**63 - 1) - 72) // 4 - 1
    2305843009213693932
    
    1
    The original list : ['gfg', 'is', 'best', 'for', 'geeks']
    Maximum length string is : geeks
    
    1
    The original list : ['gfg', 'is', 'best', 'for', 'geeks']
    Maximum length string is : geeks
    
    2

    The original list : ['gfg', 'is', 'best', 'for', 'geeks']
    Maximum length string is : geeks
    
    3
    The original list : ['gfg', 'is', 'best', 'for', 'geeks']
    Maximum length string is : geeks
    
    4
    The original list : ['gfg', 'is', 'best', 'for', 'geeks']
    Maximum length string is : geeks
    
    5
    The original list : ['gfg', 'is', 'best', 'for', 'geeks']
    Maximum length string is : geeks
    
    6

    The original list : ['gfg', 'is', 'best', 'for', 'geeks']
    Maximum length string is : geeks
    
    7
    The original list : ['gfg', 'is', 'best', 'for', 'geeks']
    Maximum length string is : geeks
    
    8
    The original list : ['gfg', 'is', 'best', 'for', 'geeks']
    Maximum length string is : geeks
    
    9U+000

    The original list : ['gfg', 'is', 'best', 'for', 'geeks']
    Maximum length string is : geeks
    
    3
    The original list : ['gfg', 'is', 'best', 'for', 'geeks']
    Maximum length string is : geeks
    
    4U+7F2
    The original list : ['gfg', 'is', 'best', 'for', 'geeks']
    Maximum length string is : geeks
    
    6 U+7F4

    Đầu ra:

    The original list : ['gfg', 'is', 'best', 'for', 'geeks']
    Maximum length string is : geeks
    

    U+001

    The original list : ['gfg', 'is', 'best', 'for', 'geeks']
    Maximum length string is : geeks
    
    9
    >>> ((2**63 - 1) - 72) // 4 - 1
    2305843009213693932
    
    1
    The original list : ['gfg', 'is', 'best', 'for', 'geeks']
    Maximum length string is : geeks
    
    9U+005

    This method can also be used to solve this problem. In this, we use inbuilt max() with “len” as key argument to extract the string with the maximum length.

    Đôi khi, trong khi làm việc với danh sách Python, chúng ta có thể gặp vấn đề trong đó chúng ta nhận được các chuỗi dưới dạng các yếu tố và muốn tính toán chuỗi có độ dài tối đa. Loại vấn đề này có thể có các ứng dụng trong nhiều lĩnh vực. Hãy để thảo luận về những cách nhất định trong đó vấn đề này có thể được giải quyết.

    Phương pháp số 1: Sử dụng loopthis là phương pháp vũ phu trong đó chúng tôi thực hiện nhiệm vụ này. Trong đó, chúng tôi chạy một vòng lặp để giữ bộ nhớ có độ dài chuỗi dài nhất và trả về chuỗi có độ dài tối đa trong danh sách.

    U+007

    >>> ((2**63 - 1) - 72) // 4 - 1
    2305843009213693932
    
    1 U+FF7U+FF8
    >>> ((2**63 - 1) - 72) // 4 - 1
    2305843009213693932
    
    1
    The original list : ['gfg', 'is', 'best', 'for', 'geeks']
    Maximum length string is : geeks
    
    9
    /* Largest positive value of type Py_ssize_t. */
    #define PY_SSIZE_T_MAX ((Py_ssize_t)(((size_t)-1)>>1))
    
    01

    The original list : ['gfg', 'is', 'best', 'for', 'geeks']
    Maximum length string is : geeks
    
    3
    The original list : ['gfg', 'is', 'best', 'for', 'geeks']
    Maximum length string is : geeks
    
    4U+7F2
    The original list : ['gfg', 'is', 'best', 'for', 'geeks']
    Maximum length string is : geeks
    
    6 U+7F4

    Đầu ra:

    The original list : ['gfg', 'is', 'best', 'for', 'geeks']
    Maximum length string is : geeks
    


    Chiều dài trong Python là bao nhiêu?

    Hàm Len () là một trong những chức năng tích hợp của Python.Nó trả về chiều dài của một đối tượng.Ví dụ, nó có thể trả về số lượng mục trong một danh sách.Bạn có thể sử dụng chức năng với nhiều loại dữ liệu khác nhau.Tuy nhiên, không phải tất cả các loại dữ liệu là đối số hợp lệ cho Len ().returns the length of an object. For example, it can return the number of items in a list. You can use the function with many different data types. However, not all data types are valid arguments for len() .

    Độ dài chuỗi tối đa là bao nhiêu?

    Mặc dù một chuỗi được trích dẫn riêng lẻ không thể dài hơn 2048 byte, một chuỗi theo nghĩa đen khoảng 65535 byte có thể được xây dựng bằng các chuỗi nối.2048 bytes, a string literal of roughly 65535 bytes can be constructed by concatenating strings.

    Độ dài tối đa của biến chuỗi trong Python là gì?

    Trên một hệ thống 32 bit, khoảng 2 tỷ hoặc 500 triệu ký tự.2 billion or 500 million characters.