Hướng dẫn is python value type or reference type? - là kiểu giá trị python hay kiểu tham chiếu?

Biến và các tài liệu tham khảo khác

Một chương trình Python truy cập các giá trị dữ liệu thông qua các tài liệu tham khảo. Tham chiếu là một tên đề cập đến vị trí cụ thể trong bộ nhớ của một giá trị (đối tượng). Tài liệu tham khảo có dạng biến, thuộc tính và mục. Trong Python, một biến hoặc tham chiếu khác không có loại nội tại. Tuy nhiên, đối tượng mà một tham chiếu được ràng buộc tại một thời điểm nhất định có một loại, tuy nhiên. Bất kỳ tham chiếu nhất định có thể bị ràng buộc với các đối tượng thuộc các loại khác nhau trong quá trình thực hiện một chương trình.reference is a name that refers to the specific location in memory of a value (object). References take the form of variables, attributes, and items. In Python, a variable or other reference has no intrinsic type. The object to which a reference is bound at a given time does have a type, however. Any given reference may be bound to objects of different types during the execution of a program.

Biến

Trong Python, không có tuyên bố. Sự tồn tại của một biến phụ thuộc vào một câu lệnh binds biến, hoặc, nói cách khác, đặt một tên để giữ một tham chiếu đến một số đối tượng. Bạn cũng có thể unbind một biến bằng cách đặt lại tên để nó không còn giữ một tham chiếu nữa. Các câu lệnh gán là cách phổ biến nhất để liên kết các biến và các tài liệu tham khảo khác. Tuyên bố del không liên kết tài liệu tham khảo.

Liên kết một tài liệu tham khảo đã bị ràng buộc còn được gọi là rebinding nó. Bất cứ khi nào ràng buộc được đề cập trong cuốn sách này, việc phục hồi được bao gồm hoàn toàn ngoại trừ nơi nó được loại trừ rõ ràng. Rebinding hoặc không liên kết một tham chiếu không có tác dụng đối với đối tượng mà tham chiếu bị ràng buộc, ngoại trừ một đối tượng biến mất khi không có gì đề cập đến nó. Việc dọn dẹp tự động các đối tượng mà không có tài liệu tham khảo nào được gọi là garbage collection.

Bạn có thể đặt tên cho một biến với bất kỳ định danh nào ngoại trừ 29 được bảo lưu dưới dạng từ khóa Python (xem Phần 4.1.2.2 trước đó trong chương này). Một biến có thể là toàn cầu hoặc địa phương. GlobalVarable là một thuộc tính của một đối tượng mô -đun (Chương 7 bao gồm các mô -đun). Một địa phương có thể sống trong một không gian tên địa phương chức năng (xem phần 4.10 sau đó trong chương này).global variable is an attribute of a module object (Chapter 7 covers modules). A local variable lives in a function’s local namespace (see Section 4.10 later in this chapter).

Thuộc tính và mục đối tượng

Sự khác biệt giữa các thuộc tính và mục của một đối tượng nằm trong cú pháp bạn sử dụng để truy cập chúng. Một

a = b = c = 0
0 của một đối tượng được biểu thị bằng một tham chiếu đến đối tượng, theo sau là một khoảng thời gian (.), Tiếp theo là một định danh gọi là ____10
a = b = c = 0
2 (tức là, ____ 13 .____ 14 đề cập đến thuộc tính của đối tượng
a = b = c = 0
3 được đặt tên là
a = b = c = 0
4).

Một

a = b = c = 0
7 của một đối tượng được biểu thị bằng một tham chiếu đến đối tượng, theo sau là một biểu thức trong ngoặc (
a = b = c = 0
8). Biểu thức trong ngoặc được gọi là
a = b = c = 0
9 hoặc
a, b, c = x
0 đối với mục và đối tượng được gọi là
a, b, c = x
1 của mục (tức là,
a = b = c = 0
3
a, b, c = x
3
a = b = c = 0
4
a, b, c = x
5 đề cập đến mục tại khóa hoặc chỉ mục
a = b = c = 0
4 trong đối tượng container
a = b = c = 0
3).

Các thuộc tính có thể gọi còn được gọi là

a, b, c = x
8. Python không có sự khác biệt mạnh mẽ giữa các thuộc tính có thể gọi và không thể gọi được, như các ngôn ngữ khác làm. Các quy tắc chung về các thuộc tính cũng áp dụng cho các thuộc tính có thể gọi (Phương thức).

Truy cập các tài liệu tham khảo không tồn tại

Một lỗi lập trình phổ biến là cố gắng truy cập một tham chiếu không tồn tại. Ví dụ: một biến có thể không bị ràng buộc hoặc tên thuộc tính hoặc chỉ mục mục có thể không hợp lệ cho đối tượng mà bạn áp dụng. Trình biên dịch Python, khi phân tích và biên dịch mã nguồn, chỉ chẩn đoán lỗi cú pháp. Biên dịch không chẩn đoán các lỗi ngữ nghĩa như cố gắng truy cập thuộc tính, mục hoặc biến không liên kết. Python chỉ chẩn đoán các lỗi ngữ nghĩa khi mã sai lầm thực thi, tức là, khi chạy. Khi một hoạt động là một lỗi ngữ nghĩa Python, việc cố gắng làm tăng một ngoại lệ (xem Chương 6). Truy cập một biến không tồn tại, thuộc tính hoặc mục, giống như bất kỳ lỗi ngữ nghĩa nào khác, làm tăng một ngoại lệ.

Báo cáo chuyển nhượng

Báo cáo chuyển nhượng có thể là đơn giản hoặc tăng cường. Gán đơn giản cho một biến (ví dụ:

a = b = c = 0
2
a, b = b, a
0
a, b = b, a
1) là cách bạn tạo một biến mới hoặc viết lại một biến hiện có thành một giá trị mới. Gán đơn giản cho một thuộc tính đối tượng (ví dụ: ____ 32 .________ 33
a, b = b, a
0
a, b = b, a
1) là một yêu cầu đối tượng
a, b = b, a
2 để tạo hoặc tái lập thuộc tính
a, b = b, a
3. Bài tập đơn giản cho một mục trong một container (ví dụ:
a, b = b, a
2
a, b, c = x
3
a, b, c = x
0 binds1
a, b = b, a
1) là một yêu cầu để container
a, b = b, a
2 để tạo hoặc lật lại mục với INDEX
a, b, c = x
0.

Bài tập tăng cường (ví dụ:

a = b = c = 0
2 binds6
a, b = b, a
1) không thể, mỗi se, tạo ra các tài liệu tham khảo mới. Bài tập tăng cường có thể làm nổi bật một biến, yêu cầu một đối tượng để phản bác một trong các thuộc tính hoặc mục hiện có của nó hoặc yêu cầu đối tượng đích để tự sửa đổi (tất nhiên, một đối tượng có thể tạo các tài liệu tham khảo mới tùy ý trong khi trả lời các yêu cầu). Khi bạn đưa ra yêu cầu cho một đối tượng, tùy thuộc vào đối tượng để quyết định có nên tôn trọng yêu cầu hay nêu ra một ngoại lệ.

Plain assignment

A plain assignment statement in the simplest form has the syntax:

                     target = expression

The target is also known as the left-hand side, and the expression as the right-hand side. When the assignment statement executes, Python evaluates the right-hand side expression, then binds the expression’s value to the left-hand side target. The binding does not depend on the type of the value. In particular, Python draws no strong distinction between callable and non-callable objects, as some other languages do, so you can bind functions, methods, types, and other callables to variables.

Details of the binding do depend on the kind of target, however. The target in an assignment may be an identifier, an attribute reference, an indexing, or a slicing:

  • An identifier is a variable’s name: assignment to an identifier binds the variable with this name.

  • An attribute reference has the syntax

    a, b = b, a
    2.
    a = b = c = 0
    2.
    a, b = b, a
    2 is an expression denoting an object, and
    a = b = c = 0
    2 is an identifier, called an attribute name of the object. Assignment to an attribute reference asks object
    a, b = b, a
    2 to bind its attribute named
    a = b = c = 0
    2.

  • An indexing has the syntax

    a, b = b, a
    2
    a, b, c = x
    3 unbind6
    a, b, c = x
    5.
    a, b = b, a
    2 and unbind6 are expressions denoting any objects. Assignment to an indexing asks container
    a, b = b, a
    2 to bind its item selected by the value of unbind6, also known as the index or key of the item.

  • A slicing has the syntax

    a, b = b, a
    2
    a, b, c = x
    3 del4:del5
    a, b, c = x
    5 or
    a, b = b, a
    2
    a, b, c = x
    3 del4:del5:rebinding1
    a, b, c = x
    5.
    a, b = b, a
    2, del4, del5, and rebinding1 are expressions denoting any objects. del4, del5, and rebinding1 are all optional (i.e.,
    a, b = b, a
    2
    a, b, c = x
    3:del5 garbage3 is also a syntactically correct slicing, equivalent to
    a, b = b, a
    2 garbage5:del5 garbage7). Assignment to a slicing asks container
    a, b = b, a
    2 to bind or unbind some of its items.

We’ll come back to indexing and slicing targets later in this chapter when we discuss operations on lists and dictionaries.

When the target of the assignment is an identifier, the assignment statement specifies the binding of a variable. This is never disallowed: when you request it, it takes place. In all other cases, the assignment statement specifies a request to an object to bind one or more of its attributes or items. An object may refuse to create or rebind some (or all) attributes or items, raising an exception if you attempt a disallowed creation or rebinding.

There can be multiple targets and equals signs (

a, b = b, a
0) in a plain assignment. For example:

a = b = c = 0

binds variables collection0, collection1, and collection2 to the value collection3. Each time the statement executes, the right-hand side expression is evaluated once. Each target gets bound to the single object returned by the expression, just as if several simple assignments executed one after the other.

The target in a plain assignment can list two or more references separated by commas, optionally enclosed in parentheses or brackets. For example:

a, b, c = x

This requires

a = b = c = 0
3 to be a sequence with three items, and binds collection0 to the first item, collection1 to the second, and collection2 to the third. This kind of assignment is called an unpacking assignment, and, in general, the right-hand side expression must be a sequence with exactly as many items as there are references in the target; otherwise, an exception is raised. Each reference in the target is bound to the corresponding item in the sequence. An unpacking assignment can also swap references:

a, b = b, a

This rebinds collection0 to refer to what collection1 was bound to, and vice versa.

Augmented assignment

An augmented assignment differs from a plain assignment in that, instead of an equals sign (

a, b = b, a
0) between the target and the expression, it uses an
a = b = c = 0
01
a = b = c = 0
02: a binary operator followed by
a, b = b, a
0. The augmented operators are binds6,
a = b = c = 0
05,
a = b = c = 0
06,
a = b = c = 0
07,
a = b = c = 0
08,
a = b = c = 0
09,
a = b = c = 0
10,
a = b = c = 0
11,
a = b = c = 0
12,
a = b = c = 0
13,
a = b = c = 0
14, and
a = b = c = 0
15. An augmented assignment can have only one target on the left-hand side; that is, augmented assignment doesn’t support multiple targets.

In an augmented assignment, just as in a plain one, Python first evaluates the right-hand side expression. Then, if the left-hand side refers to an object that has a special method for the appropriate in-place version of the operator, Python calls the method with the right-hand side value as its argument. It is up to the method to modify the left-hand side object appropriately and return the modified object (Chapter 5 covers special methods). If the left-hand side object has no appropriate in-place special method, Python applies the corresponding binary operator to the left-hand side and right-hand side objects, then rebinds the target reference to the operator’s result. For example,

a = b = c = 0
3 binds6
a = b = c = 0
4 is like
a = b = c = 0
3
a, b = b, a
0
a = b = c = 0
3
a = b = c = 0
22
a = b = c = 0
4
a = b = c = 0
24 when
a = b = c = 0
3 has special method
a = b = c = 0
26. Otherwise
a = b = c = 0
3 binds6
a = b = c = 0
4 is like
a = b = c = 0
3
a, b = b, a
0
a = b = c = 0
3
a = b = c = 0
33
a = b = c = 0
4.

Bài tập tăng cường không bao giờ tạo ra tham chiếu mục tiêu của nó: Mục tiêu phải bị ràng buộc khi thực hiện gán tăng cường. Bài tập tăng cường có thể gắn lại tham chiếu mục tiêu vào một đối tượng mới hoặc sửa đổi cùng một đối tượng mà tham chiếu đích đã bị ràng buộc. Ngược lại, gán đơn giản có thể tạo hoặc khôi phục tham chiếu mục tiêu bên trái, nhưng nó không bao giờ sửa đổi đối tượng, nếu có, tham chiếu mục tiêu trước đó bị ràng buộc. Sự khác biệt giữa các đối tượng và tham chiếu đến các đối tượng là rất quan trọng ở đây. Ví dụ:

a = b = c = 0
3
a, b = b, a
0
a = b = c = 0
3
a = b = c = 0
33
a = b = c = 0
4 Không sửa đổi đối tượng mà tên
a = b = c = 0
3 ban đầu bị ràng buộc. Thay vào đó, nó làm nổi bật tên
a = b = c = 0
3 để chỉ một đối tượng mới.
a = b = c = 0
3 binds6
a = b = c = 0
4, ngược lại, sửa đổi đối tượng mà tên
a = b = c = 0
3 bị ràng buộc khi đối tượng đó có phương pháp đặc biệt
a = b = c = 0
26; Mặt khác,
a = b = c = 0
3 binds6
a = b = c = 0
4 Rebind tên
a = b = c = 0
3, giống như
a = b = c = 0
3
a, b = b, a
0
a = b = c = 0
3
a = b = c = 0
33
a = b = c = 0
4.

DEL tuyên bố

Mặc dù tên của nó, một tuyên bố del không xóa các đối tượng: thay vào đó, nó không liên kết các tài liệu tham khảo. Xóa đối tượng có thể theo hậu quả, bằng cách thu gom rác, khi không còn tham chiếu đến một đối tượng.

Một câu lệnh del bao gồm từ khóa del, theo sau là một hoặc nhiều tham chiếu mục tiêu được phân tách bằng dấu phẩy (,). Mỗi mục tiêu có thể là một biến, tham chiếu thuộc tính, lập chỉ mục hoặc cắt, giống như đối với các câu lệnh gán và phải được ràng buộc tại thời điểm del thực thi. Khi mục tiêu del là một định danh, câu lệnh del chỉ định sự kết hợp của biến. Miễn là định danh bị ràng buộc, không liên kết, nó không bao giờ được phép: khi được yêu cầu, nó diễn ra.

Trong tất cả các trường hợp khác, câu lệnh del chỉ định yêu cầu đến một đối tượng để giải phóng một hoặc nhiều thuộc tính hoặc mục của nó. Một đối tượng có thể từ chối giải phóng một số (hoặc tất cả) các thuộc tính hoặc vật phẩm, nêu ra một ngoại lệ nếu cố gắng không được phép không liên kết (xem thêm __delattr__ trong Chương 5). Không liên kết với một sự cắt lát thường có tác dụng tương tự như gán một chuỗi trống cho lát cắt đó, nhưng tùy thuộc vào đối tượng container để thực hiện sự tương đương này.

Nhận Python một cách ngắn gọn với nền tảng học tập O hèReilly.learning platform.

Các thành viên của O hèReilly trải nghiệm đào tạo trực tuyến trực tiếp, cộng với sách, video và nội dung kỹ thuật số từ gần 200 nhà xuất bản.nearly 200 publishers.

Python là tham chiếu hay giá trị?

Python chuyển các đối số không bằng cách tham chiếu cũng như giá trị, mà bằng cách gán.neither by reference nor by value, but by assignment.

Python có loại giá trị không?

Trong Python, loại dữ liệu số đại diện cho dữ liệu có giá trị số.Giá trị số có thể là số nguyên, số nổi hoặc thậm chí các số phức tạp.Các giá trị này được định nghĩa là int, float và lớp phức tạp trong Python.Số nguyên - Giá trị này được biểu thị bằng lớp Int.numeric data type represent the data which has numeric value. Numeric value can be integer, floating number or even complex numbers. These values are defined as int , float and complex class in Python. Integers – This value is represented by int class.

Sự khác biệt giữa giá trị và loại tham chiếu trong Python là gì?

Một thể hiện loại giá trị giữ một bản sao duy nhất của dữ liệu của nó, ví dụ, một cấu trúc hoặc loại tham chiếu enum, chia sẻ một bản sao dữ liệu của nó và loại thường là một lớp. A reference type, shares a single copy of its data, and the type is usually a class .

VAR là loại giá trị hoặc loại tham chiếu?

Đó là một chi tiết ngôn ngữ được trình biên dịch hoán đổi cho một loại được suy ra.Các đối tượng động luôn được đóng hộp để hoạt động như các tài liệu tham khảo, ngay cả khi loại thực tế là loại giá trị như int.Bạn có thể kết luận rằng biến được tuyên bố là động sẽ luôn hoạt động như một tài liệu tham khảo.variable declared as dynamic will always behave as a reference.