Đăng nhập vào tài khoản Python Barsels của bạn để lưu cài đặt screencast của bạn.
Vẫn chưa có tài khoản? Đăng ký tại đây.
Từ "thay đổi" là mơ hồ trong Python: chúng ta có hai loại "thay đổi" riêng biệt trong Python."change" is ambiguous in Python: we have two distinct types of "change" in Python.
Chúng ta có thể "thay đổi" một biến bằng cách thay đổi đối tượng mà biến đang chỉ vào. Chúng tôi làm điều đó thông qua một tuyên bố chuyển nhượng.
Chúng ta cũng có thể "thay đổi" một đối tượng thực tế thông qua một đột biến.
Chúng ta hãy xem cả hai loại thay đổi.
Bài tập
Hãy nói rằng chúng tôi có một biến
>>> x = [1, 2, 3]
>>> id[x]
2253221094088
2 trỏ đến giá trị 4.Chúng ta có thể sử dụng chức năng ID tích hợp để có được vị trí bộ nhớ của đối tượng Biến này
>>> x = [1, 2, 3]
>>> id[x]
2253221094088
2 đang chỉ ra [mã định danh duy nhất này sẽ không bao giờ thay đổi trong vòng đời của một đối tượng]:>>> id[x]
140727864255408
Nếu chúng ta trỏ
>>> x = [1, 2, 3]
>>> id[x]
2253221094088
2 vào một đối tượng mới, hãy nói một danh sách, đó là >>> x = [1, 2, 3]
>>> id[x]
2253221094088
5 sẽ thay đổi:>>> x = [1, 2, 3]
>>> id[x]
2253221094088
Nếu chúng ta gán
>>> x = [1, 2, 3]
>>> id[x]
2253221094088
6 cho >>> x = [1, 2, 3]
>>> id[x]
2253221094088
2, điều này sẽ làm cho >>> x = [1, 2, 3]
>>> id[x]
2253221094088
6 trỏ đến cùng một vị trí bộ nhớ như >>> x = [1, 2, 3]
>>> id[x]
2253221094088
2:>>> y = x
>>> id [y]
2253221094088
Đây là loại thay đổi đầu tiên: gán. Chúng ta có thể thay đổi đối tượng nào một biến đang chỉ bằng cách thực hiện một bài tập.which object a variable is pointing to by doing an assignment.
Đột biến
Loại "thay đổi" thứ hai là đột biến. Chuyển đổi thay đổi biến, nhưng đột biến thay đổi đối tượng.mutation. Assignment changes variables, but mutation changes objects.
Hầu hết các đối tượng Python có thể được thay đổi sau khi chúng được tạo. Danh sách, bộ và từ điển đều có thể được thay đổi, trong khi các bộ dữ liệu, số và chuỗi không thể. Các đối tượng có thể được thay đổi được gọi là có thể thay đổi và hành động thay đổi một trong những đối tượng này là một đột biến.mutable and the act of changing one of these objects is a mutation.
Bài tập khá nhiều luôn liên quan đến một dấu hiệu
>>> y = x
>>> id [y]
2253221094088
0, trong khi đột biến có thể có rất nhiều hình thức: một hình thức là một cuộc gọi phương thức. Ví dụ: gọi phương thức >>> y = x
>>> id [y]
2253221094088
1 trong danh sách.Hãy lấy danh sách của chúng tôi từ trước đó cả
>>> x = [1, 2, 3]
>>> id[x]
2253221094088
2 và >>> x = [1, 2, 3]
>>> id[x]
2253221094088
6 chỉ đến:>>> x
[1, 2, 3]
>>> y
[1, 2, 3]
>>> id[x]
2253221094088
>>> id [y]
2253221094088
Và chúng tôi sẽ gọi phương thức
>>> y = x
>>> id [y]
2253221094088
1 trên biến >>> x = [1, 2, 3]
>>> id[x]
2253221094088
2 để thêm một mục mới vào danh sách của chúng tôi:>>> x.append[4]
>>> x
[1, 2, 3, 4]
Hãy nhớ rằng cả
>>> x = [1, 2, 3]
>>> id[x]
2253221094088
6 và >>> x = [1, 2, 3]
>>> id[x]
2253221094088
2 đều chỉ vào cùng một đối tượng, vì vậy nếu chúng ta nhìn vào >>> x = [1, 2, 3]
>>> id[x]
2253221094088
6, nó dường như cũng sẽ thay đổi:Lưu ý rằng chúng tôi đã không thực sự "thay đổi"
>>> x = [1, 2, 3]
>>> id[x]
2253221094088
2 hoặc >>> x = [1, 2, 3]
>>> id[x]
2253221094088
6 vì >>> x = [1, 2, 3]
>>> id[x]
2253221094088
5 của hai biến này giống như trước đây:>>> id[x]
2253221094088
>>> id [y]
2253221094088
Thay vào đó, chúng tôi đã thay đổi đối tượng mà hai biến này đang chỉ ra.
Bản tóm tắt
Để tóm tắt lại, nếu chúng ta có hai biến
>>> x = [1, 2, 3]
>>> id[x]
2253221094088
2 và >>> x = [1, 2, 3]
>>> id[x]
2253221094088
6 và cả hai đều chỉ vào cùng một đối tượng trong bộ nhớ:>>> x
[1, 2, 3, 4]
>>> y
[1, 2, 3, 4]
>>> id[x]
2253221094088
>>> id [y]
2253221094088
Nếu chúng tôi sau đó đã chỉ định lại
>>> x = [1, 2, 3]
>>> id[x]
2253221094088
2 vào một danh sách mới:>>> x = [4, 5, 6]
>>> x
[4, 5, 6]
Tôi đã thực hiện một bài tập có nghĩa là tôi đã thay đổi đối tượng nào biến
>>> x = [1, 2, 3]
>>> id[x]
2253221094088
2 đang chỉ.assignment which means I've changed which object the variable >>> x = [1, 2, 3]
>>> id[x]
2253221094088
2 is pointing to.Biến
>>> x = [1, 2, 3]
>>> id[x]
2253221094088
2 đã thay đổi ở đây nhưng >>> x = [1, 2, 3]
>>> id[x]
2253221094088
6 không:Bởi vì chúng tôi đã không chỉ
>>> x = [1, 2, 3]
>>> id[x]
2253221094088
6 bất cứ nơi nào mới: chúng tôi chỉ chỉ >>> x = [1, 2, 3]
>>> id[x]
2253221094088
2 vào một đối tượng mới, do đó >>> x = [1, 2, 3]
>>> id[x]
2253221094088
5 đã thay đổi nhưng >>> x = [1, 2, 3]
>>> id[x]
2253221094088
5 của >>> x = [1, 2, 3]
>>> id[x]
2253221094088
6 giống như trước đây:>>> id[x]
2253221617032
>>> id[y]
2253221094088
Nếu chúng ta trỏ
>>> x = [1, 2, 3]
>>> id[x]
2253221094088
2 và >>> x = [1, 2, 3]
>>> id[x]
2253221094088
6 trở lại cùng một đối tượng và sau đó gọi một phương thức trên đối tượng này để yêu cầu nó tự đột biến:>>> x = y
>>> x
[1, 2, 3, 4]
>>> x.pop[]
4
Cả
>>> x = [1, 2, 3]
>>> id[x]
2253221094088
2 và >>> x = [1, 2, 3]
>>> id[x]
2253221094088
6 sẽ phản ánh sự thay đổi này:>>> x = [1, 2, 3]
>>> id[x]
2253221094088
0Bởi vì hai biến này trỏ đến cùng một đối tượng:these two variables point to the same object:
>>> x = [1, 2, 3]
>>> id[x]
2253221094088
1Vì vậy, hai loại thay đổi trong Python là:
- Nhiệm vụ, thay đổi đối tượng mà một biến chỉ ra, which changes which object a variable points to
- Đột biến, thay đổi chính một đối tượng [sẽ xuất hiện để thay đổi mọi biến chỉ vào đối tượng đó], which changes an object itself [that will appear to change every variable that points to that object]