Hướng dẫn how does python works based on references with an example? - python hoạt động như thế nào dựa trên các tham chiếu với một ví dụ?

In python everything goes by reference

In Python, everything is a reference, and the references get passed around by value.

If you want to use those terms. But those terms make things harder to understand.

Much simpler: in Python, a variable is a name for an object. = is used to change what object a name refers to. The left-hand side can refer to part of an existing object, in which case the whole object is changed by replacing that part. This is because the object, in turn, doesn't really contain its parts, but instead contains more names, which can be caused to start referring to different things.

then when is a new object created ?

Objects are created when they are created (by using the class constructor, or in the case of built-in types that have a literal representation, by typing out a literal). I don't understand how this is relevant to the rest of your question.

m = m[1:]   # m changes its reference to the new sliced list

Yes, of course. Now m refers to the result of evaluating m[1:].

edits m but not d (I wanted to change d)

Yes, of course. Why would it change

edits m but not d (I wanted to change d)
0? It wasn't some kind of magic, it was simply the result of evaluating
edits m but not d (I wanted to change d)
1. Exactly the same thing happens on both lines.

Let's look at a simpler example.

m = 1
m = 2

Does this cause

edits m but not d (I wanted to change d)
2 to become
edits m but not d (I wanted to change d)
3? No, of course not. Integers are immutable. But the same thing is happening: m is caused to name one thing, and then to name another thing.

Or, another way: if "references" were to work the way you expect, then the line

edits m but not d (I wanted to change d)
5 would be recursive. You're expecting it to mean "anywhere that you see m, treat it as if it meant m[1:]". Well, in that case, m[1:] would actually mean
edits m but not d (I wanted to change d)
9, which would then mean
m = 1
m = 2
0, etc.

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

m = 1
m = 2
1 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ể
m = 1
m = 2
2 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ố
m = 1
m = 2
3 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à

m = 1
m = 2
4 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à
m = 1
m = 2
5
m = 1
m = 2
6.

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

m = 1
m = 2
7 của một đối tượng được ký hiệu là 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à
m = 1
m = 2
7
m = 1
m = 2
9 (tức là, ________ 30 .____ 31 đề cập đến thuộc tính của đối tượng
                     target = expression
0 được đặt tên là
                     target = expression
1).

Một

                     target = expression
4 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 (
                     target = expression
5). Biểu thức trong ngoặc được gọi là
                     target = expression
6 hoặc
                     target = expression
7 cho mục và đối tượng được gọi là
                     target = expression
8 của mục (tức là,
                     target = expression
0
a = b = c = 0
0
                     target = expression
1
a = b = c = 0
2 đề cập đến mục tại khóa hoặc chỉ mục
                     target = expression
1 trong đối tượng container
                     target = expression
0).

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

a = b = c = 0
5. 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ụ:

m = 1
m = 2
9 =
a = b = c = 0
8) 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ụ: ____ 49 .____ ____ 50 =
a = b = c = 0
8) là một yêu cầu đối tượng
a = b = c = 0
9 để tạo hoặc phục hồi thuộc tính
a, b, c = x
0. Bài tập đơn giản cho một mục trong một container (ví dụ:
a = b = c = 0
9
a = b = c = 0
0
                     target = expression
7
a, b, c = x
8
a = b = c = 0
8) là một yêu cầu để container
a = b = c = 0
9 để tạo hoặc lật lại mục với INDEX
                     target = expression
7.

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

m = 1
m = 2
9
a, b = b, a
3
a = b = c = 0
8) 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ệ.

Bài tập đơn giản

Một câu lệnh gán đơn giản ở dạng đơn giản nhất có cú pháp:

                     target = expression

Mục tiêu còn được gọi là phía bên trái, và biểu thức là phía bên phải. Khi câu lệnh gán thực hiện, Python đánh giá biểu thức bên tay phải, sau đó liên kết giá trị biểu thức của Biểu thức với mục tiêu bên tay trái. Các ràng buộc không phụ thuộc vào loại giá trị. Cụ thể, Python không có sự khác biệt mạnh mẽ giữa các đối tượng có thể gọi và không thể gọi, như một số ngôn ngữ khác, vì vậy bạn có thể liên kết các hàm, phương thức, loại và các ứng dụng gọi khác với các biến.

Chi tiết về ràng buộc không phụ thuộc vào loại mục tiêu, tuy nhiên. Mục tiêu trong một bài tập có thể là một định danh, tham chiếu thuộc tính, lập chỉ mục hoặc cắt lát:

  • Một định danh là một biến tên Biến: gán cho một định danh liên kết biến với tên này.

  • Tham chiếu thuộc tính có cú pháp ________ 49 .________ 29.

    a = b = c = 0
    9 là một biểu thức biểu thị một đối tượng và
    m = 1
    m = 2
    
    9 là một định danh, được gọi là tên thuộc tính của đối tượng. Gán cho một tham chiếu thuộc tính yêu cầu đối tượng
    a = b = c = 0
    9 liên kết thuộc tính của nó có tên
    m = 1
    m = 2
    
    9.

  • Một chỉ mục có cú pháp

    a = b = c = 0
    9
    a = b = c = 0
    0 =3
    a = b = c = 0
    2.
    a = b = c = 0
    9 và =3 là biểu thức biểu thị bất kỳ đối tượng nào. Việc gán cho một chỉ mục yêu cầu container
    a = b = c = 0
    9 để liên kết mục của nó được chọn bởi giá trị =3, còn được gọi là chỉ mục hoặc khóa của mục.

  • Cắt lát có cú pháp

    a = b = c = 0
    9
    a = b = c = 0
    0 ________ 81: ________ 82
    a = b = c = 0
    2 hoặc
    a = b = c = 0
    9
    a = b = c = 0
    0 ________ 81: ________ 82: ________ 88
    a = b = c = 0
    2.
    a = b = c = 0
    9, m1, m2 và m8 là các biểu thức biểu thị bất kỳ đối tượng nào. m1, m2 và m8 đều là tùy chọn (nghĩa là,
    a = b = c = 0
    9 ________ 40: ________ 82
    edits m but not d (I wanted to change d)
    
    00 cũng là một sự cắt lát chính xác về mặt cú pháp, tương đương với
    a = b = c = 0
    9 ____ 102: ________ 82
    edits m but not d (I wanted to change d)
    
    04). Việc gán cho một lát cắt yêu cầu container
    a = b = c = 0
    9 liên kết hoặc giải phóng một số vật phẩm của nó.

Chúng tôi sẽ quay lại để lập chỉ mục và cắt các mục tiêu sau này trong chương này khi chúng tôi thảo luận về các hoạt động trên danh sách và từ điển.

Khi mục tiêu của gán là một định danh, câu lệnh gán chỉ định liên kết của một biến. Điều này không bao giờ không được phép: khi bạn yêu cầu nó, nó diễn ra. Trong tất cả các trường hợp khác, câu lệnh gán chỉ định một yêu cầu với một đối tượng để liên kết 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 tạo hoặc phục hồi 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 bạn cố gắng tạo ra hoặc tái tạo không được phép.

Có thể có nhiều mục tiêu và bằng các dấu hiệu (=) trong một gán đơn giản. Ví dụ:

a = b = c = 0

Liên kết các biến

edits m but not d (I wanted to change d)
07,
edits m but not d (I wanted to change d)
08 và
edits m but not d (I wanted to change d)
09 với giá trị
edits m but not d (I wanted to change d)
10. Mỗi lần câu lệnh thực thi, biểu thức bên phải được đánh giá một lần. Mỗi mục tiêu bị ràng buộc với đối tượng duy nhất được trả về bởi biểu thức, giống như một số bài tập đơn giản được thực hiện lần lượt được thực hiện.

Mục tiêu trong một gán đơn giản có thể liệt kê hai hoặc nhiều tài liệu tham khảo được phân tách bằng dấu phẩy, tùy chọn được đặt trong ngoặc hoặc dấu ngoặc. Ví dụ:

a, b, c = x

Điều này đòi hỏi

                     target = expression
0 phải là một chuỗi với ba mục và liên kết
edits m but not d (I wanted to change d)
07 với mục đầu tiên,
edits m but not d (I wanted to change d)
08 với thứ hai và
edits m but not d (I wanted to change d)
09 với thứ ba. Loại gán này được gọi là một bài tập giải nén, và nói chung, biểu thức bên phải phải là một chuỗi với chính xác nhiều mục như có các tài liệu tham khảo trong mục tiêu; Nếu không, một ngoại lệ được nâng lên. Mỗi tham chiếu trong mục tiêu được liên kết với mục tương ứng trong chuỗi. Một bài tập giải nén cũng có thể hoán đổi tài liệu tham khảo:

a, b = b, a

Điều này rebinds

edits m but not d (I wanted to change d)
07 để đề cập đến những gì
edits m but not d (I wanted to change d)
08 bị ràng buộc và ngược lại.

Nhiệm vụ tăng cường

Một phân công tăng cường khác với một gán đơn giản trong đó, thay vì một dấu hiệu bằng (=) giữa mục tiêu và biểu thức, nó sử dụng

edits m but not d (I wanted to change d)
18
edits m but not d (I wanted to change d)
19: một toán tử nhị phân theo sau là =. Các toán tử tăng cường là
a, b = b, a
3,
edits m but not d (I wanted to change d)
22,
edits m but not d (I wanted to change d)
23,
edits m but not d (I wanted to change d)
24,
edits m but not d (I wanted to change d)
25,
edits m but not d (I wanted to change d)
26,
edits m but not d (I wanted to change d)
27,
edits m but not d (I wanted to change d)
28,
edits m but not d (I wanted to change d)
29,
edits m but not d (I wanted to change d)
30,
edits m but not d (I wanted to change d)
31, và ____. Một nhiệm vụ tăng cường chỉ có thể có một mục tiêu ở phía bên trái; Đó là, nhiệm vụ tăng cường không hỗ trợ nhiều mục tiêu.

Trong một nhiệm vụ tăng cường, giống như trong một đơn giản, Python trước tiên đánh giá biểu thức bên phải. Sau đó, nếu phía bên trái đề cập đến một đối tượng có phương pháp đặc biệt cho phiên bản tại chỗ thích hợp của toán tử, Python gọi phương thức có giá trị phụ bên phải làm đối số của nó. Tùy thuộc vào phương pháp để sửa đổi đối tượng bên bên trái một cách thích hợp và trả về đối tượng được sửa đổi (Chương 5 bao gồm các phương thức đặc biệt). Nếu đối tượng phía bên trái không có phương pháp đặc biệt tại chỗ phù hợp, Python áp dụng toán tử nhị phân tương ứng cho các đối tượng bên và bên phải bên trái, thì hãy lặp lại tham chiếu mục tiêu đến kết quả của toán tử. Ví dụ:

                     target = expression
0
a, b = b, a
3
                     target = expression
1 giống như
                     target = expression
0 =
                     target = expression
0
edits m but not d (I wanted to change d)
39
                     target = expression
1
edits m but not d (I wanted to change d)
41 khi
                     target = expression
0 có phương pháp đặc biệt
edits m but not d (I wanted to change d)
43. Nếu không,
                     target = expression
0
a, b = b, a
3
                     target = expression
1 giống như
                     target = expression
0 =
                     target = expression
0
edits m but not d (I wanted to change d)
50
                     target = expression
1.

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ụ:

                     target = expression
0 =
                     target = expression
0
edits m but not d (I wanted to change d)
50
                     target = expression
1 không sửa đổi đối tượng mà tên
                     target = expression
0 ban đầu bị ràng buộc. Thay vào đó, nó viết lại tên
                     target = expression
0 để chỉ một đối tượng mới.
                     target = expression
0
a, b = b, a
3
                     target = expression
1, ngược lại, sửa đổi đối tượng mà tên
                     target = expression
0 bị ràng buộc khi đối tượng đó có phương pháp đặc biệt
edits m but not d (I wanted to change d)
43; Mặt khác,
                     target = expression
0
a, b = b, a
3
                     target = expression
1 Rebind Tên
                     target = expression
0, giống như
                     target = expression
0 =
                     target = expression
0
edits m but not d (I wanted to change d)
50
                     target = expression
1.

DEL tuyên bố

Mặc dù tên của nó, một câu lệnh

m = 1
m = 2
3 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

m = 1
m = 2
3 bao gồm từ khóa
m = 1
m = 2
3, 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
m = 1
m = 2
3 thực thi. Khi mục tiêu
m = 1
m = 2
3 là một định danh, câu lệnh
m = 1
m = 2
3 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

m = 1
m = 2
3 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.

Tài liệu tham khảo Python hoạt động như thế nào?

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.A 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.

Biến tham chiếu trong Python với ví dụ là gì?

Xuất bản ngày 22 tháng 4 năm 2019. Trong Python khi chúng ta gán một giá trị cho một tên, chúng ta thực sự tạo một đối tượng và tham chiếu đến nó.Ví dụ: trong a = 1, một đối tượng có giá trị '1' được tạo trong bộ nhớ và tham chiếu 'A' hiện chỉ vào nó.when we assign a value to a name, we actually create an object and a reference to it. For example in a=1, an object with value '1' is created in memory and a reference 'a' now points to it.

Tham khảo Python có dựa trên không?

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..

Làm thế nào để bạn có được một tài liệu tham khảo trong Python?

Có 2 cách để có được số lượng tham chiếu của đối tượng:..
Sử dụng GetRefCount từ Mô -đun SYS.Trong Python, theo mặc định, các biến được truyền qua tham chiếu.Do đó, khi chúng ta chạy sys.....
Sử dụng c_long.from_address từ mô -đun Ctypes.Trong phương pháp này, chúng tôi vượt qua địa chỉ bộ nhớ của biến.Vì vậy, ctypes ..