Hướng dẫn is there a limit to string length python? - có giới hạn nào đối với độ dài chuỗi python không?

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à U+0100 đến U+FFFF) 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))
    
    0 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))
1 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))
1 đượ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))
3 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))
3 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))
5, mỗi ____ 16 đều 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))
7 thì tất cả các ____ 16 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

/* Largest positive value of type Py_ssize_t. */
#define PY_SSIZE_T_MAX ((Py_ssize_t)(((size_t)-1)>>1))
9 (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);
    }
0 ở đâ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);
    }
1 vào
/* Largest positive value of type Py_ssize_t. */
#define PY_SSIZE_T_MAX ((Py_ssize_t)(((size_t)-1)>>1))
3 (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ó bao quanh với 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);
    }
3) 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))
1.

    struct_size = sizeof(PyCompactUnicodeObject);
    if (maxchar < 128) {
        // [...]
        struct_size = sizeof(PyASCIIObject);
    }
5 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);
    }
6, 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);
    }
7 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.

  • Nhà
  • Mã hóa mặt đất
  • Việc làm
  • Bảng trắng
  • Công cụ
  • Việc kinh doanh

Hướng dẫn is there a limit to string length python? - có giới hạn nào đối với độ dài chuỗi python không?
Hướng dẫn is there a limit to string length python? - có giới hạn nào đối với độ dài chuỗi python không?

  • Đăng nhập
  • Loại
    • Java
    • JSP
    • iOS
    • HTML
    • Android
    • Python
    • Lập trình C
    • Lập trình C ++
    • C#
    • PHP
    • CSS
    • JavaScript
    • jQuery
    • nhựa cây
    • SAP HANA
    • Cấu trúc dữ liệu
    • RDBMS
    • Mysql
    • toán học
    • Bộ vi xử lý 8085
    • Hệ điều hành
    • Điện tử kỹ thuật số
    • Phân tích thuật toán
    • Phát triển điện thoại di động
    • Mặt trước
    • Phát triển web
    • Selen
    • MongoDB
    • Mạng máy tính
    • Chủ đề chung
  • Gói chính
  • Khóa học
  • Sách điện tử
  • Thư viện
  • Q/a

Hướng dẫn is there a limit to string length python? - có giới hạn nào đối với độ dài chuỗi python không?
Hướng dẫn is there a limit to string length python? - có giới hạn nào đối với độ dài chuỗi python không?

  • Đọc được
  • Ghi chú kỳ thi IAS UPSC
  • Thực tiễn tốt nhất của nhà phát triển
  • Câu hỏi và trả lời
  • Viết sơ yếu lý lịch hiệu quả
  • Câu hỏi phỏng vấn nhân sự
  • Thuật ngữ máy tính
  • Ai là ai

Có một python giới hạn độ dài chuỗi?

Với cài đặt Python 64 bit và 64 GB bộ nhớ, chuỗi 2 python khoảng 63 GB là khá khả thi.Nếu bạn có thể nâng cấp bộ nhớ của mình vượt xa điều đó, các chuỗi khả thi tối đa của bạn sẽ có tỷ lệ dài hơn.Nhưng điều này đi kèm với một cú đánh vào Runtimes.a Python 2 string of around 63 GB should be quite feasible. If you can upgrade your memory much beyond that, your maximum feasible strings should get proportionally longer. But this comes with a hit to the runtimes.

Có giới hạn độ dài chuỗi không?

Vì vậy, chúng ta có thể có một chuỗi với độ dài 2.147.483.647 ký tự, về mặt lý thuyết.Hãy tìm độ dài tối đa của chuỗi thông qua chương trình Java.2,147,483,647 characters, theoretically. Let's find the maximum length of the string through a Java program.

Python có chiều dài không giới hạn không?

Trong trường hợp số phức, J được sử dụng trong phần tưởng tượng không nhạy cảm với trường hợp.6+1j giống như 6+1j.Ví dụ về số nguyên: -100, 200, 10000, 123456789 Số nguyên có thể có độ dài tùy ý.Không có giới hạn về độ dài của các số nguyên trong Python.There is no limit to the length of integers in Python.