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 [
7 đến/* Largest positive value of type Py_ssize_t. */ #define PY_SSIZE_T_MAX [[Py_ssize_t][[[size_t]-1]>>1]]
8] hoặc/* Largest positive value of type Py_ssize_t. */ #define PY_SSIZE_T_MAX [[Py_ssize_t][[[size_t]-1]>>1]]
- 9,223,372,036,854,775,734 ký tự nếu chuỗi của bạn chỉ có ký tự và ký tự ASCII từ khối Unicode bổ sung Latin-1 [
9 đến/* Largest positive value of type Py_ssize_t. */ #define PY_SSIZE_T_MAX [[Py_ssize_t][[[size_t]-1]>>1]]
0] hoặcstruct_size = sizeof[PyCompactUnicodeObject]; if [maxchar < 128] { // [...] struct_size = sizeof[PyASCIIObject]; }
- 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à
1 đếnstruct_size = sizeof[PyCompactUnicodeObject]; if [maxchar < 128] { // [...] struct_size = sizeof[PyASCIIObject]; }
2] hoặcstruct_size = sizeof[PyCompactUnicodeObject]; if [maxchar < 128] { // [...] struct_size = sizeof[PyASCIIObject]; }
- 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à
3 trở lên]struct_size = sizeof[PyCompactUnicodeObject]; if [maxchar < 128] { // [...] struct_size = sizeof[PyASCIIObject]; }
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
struct_size = sizeof[PyCompactUnicodeObject];
if [maxchar < 128] {
// [...]
struct_size = sizeof[PyASCIIObject];
}
4 làm loại dữ liệu để lưu trữ độ dài của container. struct_size = sizeof[PyCompactUnicodeObject];
if [maxchar < 128] {
// [...]
struct_size = sizeof[PyASCIIObject];
}
4 được định nghĩa là cùng kích thước với struct_size = sizeof[PyCompactUnicodeObject];
if [maxchar < 128] {
// [...]
struct_size = sizeof[PyASCIIObject];
}
6 của trình biên dịch nhưng đã ký. Trên hệ thống 64 bit, struct_size = sizeof[PyCompactUnicodeObject];
if [maxchar < 128] {
// [...]
struct_size = sizeof[PyASCIIObject];
}
6 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ư
struct_size = sizeof[PyCompactUnicodeObject];
if [maxchar < 128] {
// [...]
struct_size = sizeof[PyASCIIObject];
}
8, thì mỗi người sẽ lấy 1 byte để lưu trữ, nhưng nếu bạn có một chuỗi như >>> [[2**63 - 1] - 72] // 4 - 1
2305843009213693932
0 thì tất cả các ____ 29 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
>>> [[2**63 - 1] - 72] // 4 - 1
2305843009213693932
2 [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[];
>>> [[2**63 - 1] - 72] // 4 - 1
2305843009213693932
3 ở đâu/* Largest positive value of type Py_ssize_t. */
#define PY_SSIZE_T_MAX [[Py_ssize_t][[[size_t]-1]>>1]]
đang chuyển
>>> [[2**63 - 1] - 72] // 4 - 1
2305843009213693932
4 vào struct_size = sizeof[PyCompactUnicodeObject];
if [maxchar < 128] {
// [...]
struct_size = sizeof[PyASCIIObject];
}
6 [một loại được xác định bởi trình biên dịch C, một 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à >>> [[2**63 - 1] - 72] // 4 - 1
2305843009213693932
6] khiến nó trở thành 2⁶³-1 và chuyển nó thành loại struct_size = sizeof[PyCompactUnicodeObject];
if [maxchar < 128] {
// [...]
struct_size = sizeof[PyASCIIObject];
}
4.>>> [[2**63 - 1] - 72] // 4 - 1
2305843009213693932
8 chỉ là một chút chi phí cho siêu dữ liệu của đối tượng >>> [[2**63 - 1] - 72] // 4 - 1
2305843009213693932
9, 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];
}
và
s = 'abcde'
print[len[s]]
# 5
0 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.
Trong Python, bạn có thể nhận được độ dài của chuỗi
>>> [[2**63 - 1] - 72] // 4 - 1
2305843009213693932
9 [= số lượng ký tự] với hàm tích hợp s = 'abcde'
print[len[s]]
# 5
2.- Chức năng tích hợp - Len [] - Tài liệu Python 3.9.7
Bài viết này mô tả các nội dung sau đây.
- Nhận độ dài của một chuỗi [số lượng ký tự] với
2s = 'abcde' print[len[s]] # 5
- Ký tự toàn chiều rộng và nửa chiều rộng
- Trình tự thoát và các nhân vật đặc biệt
- Dòng phá vỡ
Xem bài viết sau đây để sử dụng
s = 'abcde'
print[len[s]]
# 5
2 cho các loại khác như s = 'abcde'
print[len[s]]
# 5
5.- Cách sử dụng Len [] trong Python
Nhận độ dài của một chuỗi [số lượng ký tự] với s = 'abcde'
print[len[s]]
# 5
2
s = 'abcde'
print[len[s]]
# 5
Ký tự toàn chiều rộng và nửa chiều rộng
s = 'abcde'
print[len[s]]
# 5
Ký tự toàn chiều rộng và nửa chiều rộng
Trình tự thoát và các nhân vật đặc biệt
s = 'あいうえお'
print[len[s]]
# 5
s = 'abcdeあいうえお'
print[len[s]]
# 10
Trình tự thoát và các nhân vật đặc biệt
Dòng phá vỡ
Xem bài viết sau đây để sử dụng
s = 'abcde'
print[len[s]]
# 5
2 cho các loại khác như s = 'abcde'
print[len[s]]
# 5
5.s = 'a\tb\\c'
print[s]
# a b\c
print[len[s]]
# 5
Cách sử dụng Len [] trong Python
- Bằng cách chuyển một chuỗi vào hàm tích hợp
2, độ dài của nó [số lượng ký tự] được trả về dưới dạng giá trị số nguyên.s = 'abcde' print[len[s]] # 5
s = r'a\tb\\c'
print[s]
# a\tb\\c
print[len[s]]
# 7
Cả hai ký tự toàn chiều rộng và nửa chiều rộng đều được coi là một ký tự [chiều dài: 1].
s = '\u3042\u3044\u3046'
print[s]
# あいう
print[len[s]]
# 3
Trong Python, các ký tự đặc biệt như Tab được thể hiện bằng dấu gạch chéo ngược, như
s = 'abcde'
print[len[s]]
# 5
8. Bản thân dấu gạch chéo ngược được đại diện bởi s = 'abcde'
print[len[s]]
# 5
9.s = r'\u3042\u3044\u3046'
print[s]
# \u3042\u3044\u3046
print[len[s]]
# 18
Dòng phá vỡ
Xem bài viết sau đây để sử dụng
s = 'abcde'
print[len[s]]
# 5
2 cho các loại khác như s = 'abcde'
print[len[s]]
# 5
5./* Largest positive value of type Py_ssize_t. */
#define PY_SSIZE_T_MAX [[Py_ssize_t][[[size_t]-1]>>1]]
0Cách sử dụng Len [] trong Python
/* Largest positive value of type Py_ssize_t. */
#define PY_SSIZE_T_MAX [[Py_ssize_t][[[size_t]-1]>>1]]
1Bằng cách chuyển một chuỗi vào hàm tích hợp
s = 'abcde'
print[len[s]]
# 5
2, độ dài của nó [số lượng ký tự] được trả về dưới dạng giá trị số nguyên./* Largest positive value of type Py_ssize_t. */
#define PY_SSIZE_T_MAX [[Py_ssize_t][[[size_t]-1]>>1]]
2Cả hai ký tự toàn chiều rộng và nửa chiều rộng đều được coi là một ký tự [chiều dài: 1].
- Trong Python, các ký tự đặc biệt như Tab được thể hiện bằng dấu gạch chéo ngược, như
8. Bản thân dấu gạch chéo ngược được đại diện bởis = 'abcde' print[len[s]] # 5
9.s = 'abcde' print[len[s]] # 5
/* Largest positive value of type Py_ssize_t. */
#define PY_SSIZE_T_MAX [[Py_ssize_t][[[size_t]-1]>>1]]
3Những ký tự đặc biệt này như
s = 'abcde'
print[len[s]]
# 5
8 và s = 'abcde'
print[len[s]]
# 5
9 được coi là một ký tự duy nhất./* Largest positive value of type Py_ssize_t. */
#define PY_SSIZE_T_MAX [[Py_ssize_t][[[size_t]-1]>>1]]
4Trong các chuỗi thô nơi các chuỗi thoát không được đối xử đặc biệt, chuỗi được xử lý vì nó không được hiểu là ký tự đặc biệt. Số lượng ký tự cũng được tính như là.
- Dây thô trong Python
/* Largest positive value of type Py_ssize_t. */
#define PY_SSIZE_T_MAX [[Py_ssize_t][[[size_t]-1]>>1]]
5Ngoài ra, chuỗi thoát Unicode
s = 'あいうえお'
print[len[s]]
# 5
s = 'abcdeあいうえお'
print[len[s]]
# 10
2 được coi là một ký tự duy nhất.Trình tự thoát Unicode cũng không được xử lý đặc biệt trong các chuỗi thô.
/* Largest positive value of type Py_ssize_t. */
#define PY_SSIZE_T_MAX [[Py_ssize_t][[[size_t]-1]>>1]]
6s = 'あいうえお'
print[len[s]]
# 5
s = 'abcdeあいうえお'
print[len[s]]
# 10
3 [LF: Feed Line] cũng được coi là một ký tự duy nhất.- Lưu ý rằng nếu
4 [CR: Trở lại vận chuyển + LF: Nguồn cấp dữ liệu] được sử dụng, nó được tính là hai ký tự,s = 'あいうえお' print[len[s]] # 5 s = 'abcdeあいうえお' print[len[s]] # 10
5 vàs = 'あいうえお' print[len[s]] # 5 s = 'abcdeあいうえお' print[len[s]] # 10
3.s = 'あいうえお' print[len[s]] # 5 s = 'abcdeあいうえお' print[len[s]] # 10