Hướng dẫn how do you assign one variable to another variable in python? - làm cách nào để bạn gán một biến cho một biến khác trong python?

Trong Python, một biến chứa tham chiếu đến đối tượng. Một đối tượng là một đoạn bộ nhớ được phân bổ chứa một giá trị và tiêu đề. Tiêu đề của đối tượng chứa loại của nó và bộ đếm tham chiếu biểu thị số lần đối tượng này được tham chiếu trong mã nguồn để thu gom rác có thể xác định liệu một đối tượng có thể được thu thập hay không.variable holds the reference to the object. An object is a chunk of allocated memory that holds a value and a header. Object's header contains its type and a reference counter that denotes the amount of times this object is referenced in the source code so that Garbage Collection can identify whether an object can be collected.

Bây giờ khi bạn gán các giá trị cho một biến, Python thực sự gán các tham chiếu là con trỏ cho các vị trí bộ nhớ được phân bổ cho các đối tượng:references which are pointers to memory locations allocated to objects:

# x holds a reference to the memory location allocated for  
# the object(type=string, value="Hello World", refCounter=1)

x = "Hello World" 

Bây giờ khi bạn gán các đối tượng thuộc loại khác nhau cho cùng một biến, bạn thực sự thay đổi tham chiếu để nó trỏ đến một đối tượng khác (nghĩa là vị trí bộ nhớ khác nhau). Vào thời điểm bạn gán một tham chiếu khác (và do đó đối tượng) cho một biến, trình thu thập rác sẽ ngay lập tức lấy lại không gian được phân bổ cho đối tượng trước đó, giả sử rằng nó không được tham chiếu bởi bất kỳ biến nào khác trong mã nguồn:

# x holds a reference to the memory location allocated for  
# the object(type=string, value="Hello World", refCounter=1)

x = "Hello World" 

# Now x holds the reference to a different object(type=int, value=10, refCounter=1)
# and object(type=string, value="Hello World", refCounter=0) -which is not refereced elsewhere
# will now be garbage-collected.
x = 10

Đến với ví dụ của bạn bây giờ,

spam giữ tham chiếu đến đối tượng (type = int, value = 42, refCount = 1):

>>> spam = 42

Bây giờ cheese cũng sẽ giữ tham chiếu đến đối tượng (loại = int, value = 42, refCount = 2)

>>> cheese = spam

Bây giờ Spam giữ một tham chiếu đến một đối tượng khác (loại = int, value = 100, refCount = 1)

>>> spam = 100
>>> spam
100

Nhưng phô mai sẽ tiếp tục chỉ vào đối tượng (loại = int, value = 42, refCount = 1)

>>> cheese
42

Một lần lặn sâu vào các biến trong Python

Tìm hiểu các thông tin về cách các biến trong Python hoạt động với các tài liệu tham khảo và về các kiểu chuyển tham số khác nhau.

Ảnh của Nick Fewings trên Unplash

Trong các ngôn ngữ cấp thấp như C/C ++, các khai báo biến phân bổ không gian trong bộ nhớ theo loại biến; Do đó, các lập trình viên phải chỉ định loại biến cho mỗi biến mới. Ví dụ, sử dụng ngôn ngữ C, giả sử một biến mới của loại

# x holds a reference to the memory location allocated for  
# the object(type=string, value="Hello World", refCounter=1)

x = "Hello World" 

# Now x holds the reference to a different object(type=int, value=10, refCounter=1)
# and object(type=string, value="Hello World", refCounter=0) -which is not refereced elsewhere
# will now be garbage-collected.
x = 10
0 được xác định. Chương trình sẽ phân bổ không gian trong ngăn xếp kích thước 1 byte, tương ứng với kích thước của loại ____10 trong C. Nếu biến được gán giá trị
# x holds a reference to the memory location allocated for  
# the object(type=string, value="Hello World", refCounter=1)

x = "Hello World" 

# Now x holds the reference to a different object(type=int, value=10, refCounter=1)
# and object(type=string, value="Hello World", refCounter=0) -which is not refereced elsewhere
# will now be garbage-collected.
x = 10
2, chương trình lưu trữ biểu diễn nhị phân của
# x holds a reference to the memory location allocated for  
# the object(type=string, value="Hello World", refCounter=1)

x = "Hello World" 

# Now x holds the reference to a different object(type=int, value=10, refCounter=1)
# and object(type=string, value="Hello World", refCounter=0) -which is not refereced elsewhere
# will now be garbage-collected.
x = 10
2 trong không gian được phân bổ. Cuối cùng, không tham chiếu bất kỳ đối tượng bên ngoài nào, biến lưu trữ trực tiếp giá trị
# x holds a reference to the memory location allocated for  
# the object(type=string, value="Hello World", refCounter=1)

x = "Hello World" 

# Now x holds the reference to a different object(type=int, value=10, refCounter=1)
# and object(type=string, value="Hello World", refCounter=0) -which is not refereced elsewhere
# will now be garbage-collected.
x = 10
2.

Các biến trong Python hoạt động khác nhau. Python không có khai báo loại thay đổi; Cùng một biến có thể được chỉ định lại cho các đối tượng thuộc các loại khác nhau mà không phải sửa đổi không gian biến biến trong bộ nhớ. Tương tự như con trỏ trong C, các biến trong Python không lưu trữ các giá trị trực tiếp; Họ làm việc với các tài liệu tham khảo trỏ đến các đối tượng trong bộ nhớ.

Đối tượng trong Python

Tất cả mọi thứ trong Python là một đối tượng. Các ngôn ngữ khác như Java có các loại nguyên thủy chỉ phục vụ để đại diện cho các giá trị tĩnh. Ví dụ, các loại nguyên thủy trong Java không có bất kỳ thuộc tính nào khác ngoài giá trị của chúng. Mặt khác, trong Python, ngay cả các số nguyên cũng là đối tượng (thêm về đại diện số nguyên của Python).

Python có chức năng tích hợp

# x holds a reference to the memory location allocated for  
# the object(type=string, value="Hello World", refCounter=1)

x = "Hello World" 

# Now x holds the reference to a different object(type=int, value=10, refCounter=1)
# and object(type=string, value="Hello World", refCounter=0) -which is not refereced elsewhere
# will now be garbage-collected.
x = 10
5 trả về danh sách các thuộc tính của một đối tượng. Để thể hiện cách các số nguyên trong Python là đối tượng, có thể gọi hàm
# x holds a reference to the memory location allocated for  
# the object(type=string, value="Hello World", refCounter=1)

x = "Hello World" 

# Now x holds the reference to a different object(type=int, value=10, refCounter=1)
# and object(type=string, value="Hello World", refCounter=0) -which is not refereced elsewhere
# will now be garbage-collected.
x = 10
5 với đầu vào
# x holds a reference to the memory location allocated for  
# the object(type=string, value="Hello World", refCounter=1)

x = "Hello World" 

# Now x holds the reference to a different object(type=int, value=10, refCounter=1)
# and object(type=string, value="Hello World", refCounter=0) -which is not refereced elsewhere
# will now be garbage-collected.
x = 10
7. Cuộc gọi trả về danh sách các thuộc tính sau:

['__abs__', '__add__', '__and__', '__bool__', '__ceil__',..., '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']

Đối với mục đích định dạng, danh sách ở trên không phải là danh sách đầy đủ được trả về bởi

# x holds a reference to the memory location allocated for  
# the object(type=string, value="Hello World", refCounter=1)

x = "Hello World" 

# Now x holds the reference to a different object(type=int, value=10, refCounter=1)
# and object(type=string, value="Hello World", refCounter=0) -which is not refereced elsewhere
# will now be garbage-collected.
x = 10
8.

Khi một biến được gán một giá trị trong Python, biến không lưu trữ giá trị tuyệt đối trực tiếp. Thay vào đó, Python tạo ra một tham chiếu mới cho một đối tượng đại diện cho giá trị đó. Ví dụ: dòng

# x holds a reference to the memory location allocated for  
# the object(type=string, value="Hello World", refCounter=1)

x = "Hello World" 

# Now x holds the reference to a different object(type=int, value=10, refCounter=1)
# and object(type=string, value="Hello World", refCounter=0) -which is not refereced elsewhere
# will now be garbage-collected.
x = 10
9 gán giá trị
# x holds a reference to the memory location allocated for  
# the object(type=string, value="Hello World", refCounter=1)

x = "Hello World" 

# Now x holds the reference to a different object(type=int, value=10, refCounter=1)
# and object(type=string, value="Hello World", refCounter=0) -which is not refereced elsewhere
# will now be garbage-collected.
x = 10
7 cho biến
>>> spam = 42
1. Đằng sau hậu trường, Python tạo ra một tài liệu tham khảo mới cho
>>> spam = 42
1 để chỉ vào đối tượng đại diện cho giá trị
# x holds a reference to the memory location allocated for  
# the object(type=string, value="Hello World", refCounter=1)

x = "Hello World" 

# Now x holds the reference to a different object(type=int, value=10, refCounter=1)
# and object(type=string, value="Hello World", refCounter=0) -which is not refereced elsewhere
# will now be garbage-collected.
x = 10
7. Thông tin thêm về các tài liệu tham khảo dưới đây.

Tham chiếu trực quan

Các biến trong Python có thể được hiển thị với các hộp trỏ đến các đối tượng nằm trong bộ nhớ. Ví dụ: biến

>>> spam = 42
1 có giá trị
# x holds a reference to the memory location allocated for  
# the object(type=string, value="Hello World", refCounter=1)

x = "Hello World" 

# Now x holds the reference to a different object(type=int, value=10, refCounter=1)
# and object(type=string, value="Hello World", refCounter=0) -which is not refereced elsewhere
# will now be garbage-collected.
x = 10
7 có thể được hiển thị theo cách này:

Tạo tài liệu tham khảo

Có hai cách tạo ra tài liệu tham khảo trong Python. Một cách là bằng cách gán một biểu thức cho một biến:

>>> spam = 42
6, trong đó
>>> spam = 42
7 là tên biến và
>>> spam = 42
8 là giá trị được gán cho biến.

Biểu thức sẽ không được thảo luận chi tiết trong bài viết này, nhưng đối với người đọc tò mò hơn, đây là một liên kết để tìm hiểu thêm về các biểu thức.

Biểu thức hợp lệ giảm xuống các giá trị có thể được biểu diễn bằng các đối tượng trong Python. Khi gán một biểu thức hợp lệ cho một biến, Python hoặc định vị một đối tượng trong bộ nhớ đại diện cho giá trị hoặc nó tạo ra một đối tượng mới. Khi biểu diễn đối tượng được đặt hoặc xây dựng, Python sẽ tạo một tham chiếu mới cho biến để trỏ vào đối tượng.

Phương pháp thứ hai để tạo tham chiếu trong Python là bằng cách gán một biến cho một biến khác:

>>> spam = 42
9, trong đó cả
>>> cheese = spam
0 và
>>> cheese = spam
1 là hai biến riêng biệt. Ví dụ: hãy để biến
>>> cheese = spam
1 chứa giá trị
>>> cheese = spam
3. Bây giờ, nếu biến
>>> cheese = spam
0 được gán biến
>>> cheese = spam
1, cả hai biến
>>> cheese = spam
0 và
>>> cheese = spam
1 tham chiếu cùng một đối tượng biểu thị giá trị
>>> cheese = spam
3 nhưng cả hai biến
>>> cheese = spam
0 và
>>> cheese = spam
1 đều có các tham chiếu khác nhau.

Việc gán một biến cho biến khác tạo ra một bí danh của mỗi biến. Một bí danh là biến chỉ vào cùng một đối tượng trong bộ nhớ như một biến khác. Trong ví dụ trên, cả hai biến

>>> cheese = spam
0 và
>>> cheese = spam
1 đều là bí danh của nhau.

Phá hủy tài liệu tham khảo

Trong Python, có thể phá hủy các tài liệu tham khảo. Sau khi gán một biến hoặc biểu thức cho một biến khác, có thể phá hủy tham chiếu được tạo. Hàm

>>> spam = 100
>>> spam
100
3 phá hủy tài liệu tham khảo. Quay trở lại ví dụ trên, thực thi lệnh
>>> spam = 100
>>> spam
100
4 dẫn đến việc phá hủy tham chiếu từ biến
>>> cheese = spam
0 đến đối tượng đại diện cho giá trị
>>> cheese = spam
3.

Sử dụng biến

>>> cheese = spam
0 sau khi xóa tham chiếu của nó sẽ dẫn đến lỗi sau:

Traceback (most recent call last):  File "", line 1, in NameError: name 'var1' is not defined

Lưu ý rằng

>>> spam = 100
>>> spam
100
3 không phá hủy đối tượng mà tham chiếu đang chỉ vào. Người thu gom rác Python sườn chịu trách nhiệm phá hủy các vật thể. Người thu gom rác phá hủy một đối tượng khi không còn tài liệu tham khảo nào có thể truy cập nó. Nếu lệnh
>>> spam = 100
>>> spam
100
9 được thực thi trong ví dụ trên và không có tài liệu tham khảo nào có thể truy cập thêm đối tượng đại diện cho giá trị
>>> cheese = spam
3, Trình thu thập rác Python, sẽ phá hủy đối tượng.

Bây giờ các tài liệu tham khảo biến và hình minh họa của chúng đã được giải thích, bài viết này sẽ phác thảo các phong cách chuyển tham số khác nhau và sự tương đồng và khác biệt của chúng.

Tham số chuyển kiểu

Hai kiểu đi qua tham số phổ biến là các giá trị và vượt qua từng giá trị. Python, mặt khác, sử dụng một biến thể của cả hai phong cách này được gọi là tham chiếu theo từng đối tượng.

Để giải thích ví dụ đang chạy, giả sử danh sách sau

>>> spam = 42
1 và chức năng
>>> cheese
42
2 được xác định.

Pass-by-Value

Theo kiểu qua từng giá trị, các tham số được truyền dưới dạng bản sao của các biến gốc. Ví dụ: nếu hàm

>>> cheese
42
3 được gọi với danh sách
>>> spam = 42
1, chương trình sẽ tạo một bản sao của Danh sách
>>> spam = 42
1 và sử dụng bản sao bên trong phạm vi chức năng. Phương pháp này tạo ra một tham chiếu độc lập hoàn chỉnh và biểu diễn đối tượng cho mỗi đối số. Bất kỳ thay đổi nào đối với các đối số bên trong hàm sẽ không ảnh hưởng đến các biến ban đầu được truyền dưới dạng tham số.

Pass-by-Reference

Theo kiểu ngang qua, các tham số được truyền như cùng một tham chiếu của biến ban đầu. Bất kỳ sửa đổi nào cho đối số sẽ trực tiếp sửa đổi biến ban đầu bên ngoài hàm. Ngay cả một bài tập mới sẽ khiến tài liệu tham khảo ban đầu thay đổi. Ví dụ: giả sử hàm

>>> cheese
42
3 được gọi với danh sách
>>> spam = 42
1. Khi dòng 3 được thực thi trong mã ở trên, chương trình sẽ tạo một tham chiếu mới chỉ vào danh sách mới
>>> cheese
42
8 và biến
>>> spam = 42
1 bên ngoài hàm cũng được sửa đổi để chỉ vào cùng một danh sách. Do đó, không có tham chiếu mới hoặc đối tượng được tạo ra; Hàm tiếp tục sử dụng cùng một tham chiếu từ biến ban đầu.

Pass-by-Object-Reference

Cuối cùng, theo phong cách tham chiếu qua từng đối tượng, Python tạo ra một tài liệu tham khảo mới cho mỗi đối số. Tuy nhiên, trái với phong cách qua từng giá trị, Python không tạo ra một bản sao của đối tượng gốc. Thay vào đó, mỗi điểm tham chiếu mới tại đối tượng gốc tương ứng của nó.

Sơ đồ dưới đây phác thảo sự khác biệt giữa từng kiểu:

Như được minh họa trong sơ đồ trên, kiểu tham chiếu qua từng đối tượng không tạo ra một đối tượng mới, cho phép sửa đổi trực tiếp trên đối tượng gốc. Phương pháp Danh sách

['__abs__', '__add__', '__and__', '__bool__', '__ceil__',..., '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
0 trên dòng 2 là một ví dụ về sửa đổi trên đối tượng gốc mà không trực tiếp chuyển đối tượng đến hàm.

Tương tự như phong cách pass-by-giá trị, mỗi hàm có phạm vi riêng trong Python. Bất kỳ khai báo mới nào đối với các đối số trong phạm vi hàm của hàm sẽ không ảnh hưởng đến các biến ban đầu được sử dụng làm tham số. Một ví dụ về các khai báo mới trong phạm vi hàm của hàm là dòng 3. Biến

['__abs__', '__add__', '__and__', '__bool__', '__ceil__',..., '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
1 được gán một danh sách mới. Nhiệm vụ này không có ý nghĩa đối với biến
>>> spam = 42
1 được sử dụng để gọi hàm. Mặt khác, với kiểu tham chiếu từng lần, bất kỳ khai báo mới nào trên biến
['__abs__', '__add__', '__and__', '__bool__', '__ceil__',..., '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
1 sẽ khiến cùng một gán cho biến
>>> spam = 42
1 như đã thảo luận trước đây.

Hàm ý chính của phong cách tham chiếu qua từng đối tượng là các đối số hàm trở thành bí danh của các biến ban đầu. Đối với các đối tượng bất biến, việc tạo ra các bí danh không có tác động đến chương trình tổng thể; Tuy nhiên, đối với các đối tượng có thể thay đổi, một lập trình viên Python phải cẩn thận với các sửa đổi tại chỗ (ví dụ: dòng 3 trong hàm trên). Nếu lập trình viên không muốn sửa đổi đối tượng gốc, có thể chuyển một bản sao của đối tượng gốc cho hàm và chỉ sửa đổi cho bản sao.

Suy nghĩ cuối cùng

Trong Python, mọi thứ đều là một đối tượng. Các biến không lưu trữ giá trị trực tiếp. Thay vào đó, tương tự như các gợi ý trong C, các biến Python hoạt động với các tham chiếu đến các đối tượng đại diện cho các giá trị. Tài liệu tham khảo là duy nhất cho mỗi biến nhưng nhiều tài liệu tham khảo có thể chỉ vào cùng một đối tượng. Khi hai hoặc nhiều tài liệu tham khảo chỉ vào cùng một đối tượng, các biến được gọi là bí danh của nhau.

Khi một biến được truyền đến một hàm dưới dạng tham số, các đối số hàm của hàm trở thành bí danh của biến ban đầu. Phong cách đi qua tham số Python sườn được gọi là tham chiếu qua từng đối tượng. Ý nghĩa chính của phong cách đi qua này là các sửa đổi đối với các bí danh của đối tượng có thể thay đổi từ việc thay đổi các giá trị đối tượng ban đầu cho tất cả các biến chỉ vào đối tượng đó. Nếu lập trình viên mong muốn sửa đổi đối tượng chỉ trong phạm vi hàm, có thể tạo một bản sao của đối tượng gốc và thay thế sửa đổi nó.

Cảm ơn bạn rất nhiều vì đã đọc bài viết này! Chẳng mấy chốc tôi sẽ xuất bản thêm về Python và các chủ đề lập trình khác.

Bạn có thể gán một biến cho biến khác không?

Sau khi một giá trị được gán cho một biến bằng toán tử gán, bạn có thể gán giá trị của biến đó cho biến khác bằng toán tử gán.you can assign the value of that variable to another variable using the assignment operator.

Những cách khác nhau để gán các biến trong Python là gì?

Dưới đây chúng tôi thấy từng người trong số họ ...
Khởi tạo trực tiếp.Trong phương thức này, chúng tôi khai báo trực tiếp biến và gán một giá trị bằng cách sử dụng = dấu.....
Thí dụ.x = 5 x = 9 in (a) ....
Đầu ra.....
Sử dụng if-else.Chúng ta có thể khởi tạo giá trị của một biến bằng một số điều kiện.....
Thí dụ.....
Output..

Tôi có thể gán hai biến cùng một lúc không?

Gán các giá trị cho nhiều biến trong một dòng được đưa ra ở trên là cơ chế gán chỉ các biến trong python nhưng có thể gán nhiều biến cùng một lúc.Python gán các giá trị từ phải sang trái.it is possible to assign multiple variables at the same time. Python assigns values from right to left.