Các đối số trong python được truyền theo giá trị hay theo tham chiếu?

Không thể phủ nhận pass-by-reference và pass-by-value là hai cách được công nhận và dễ hiểu nhất để truyền tham số giữa các ngôn ngữ lập trình. Đáng buồn thay, Python là 'tham chiếu theo đối tượng', không phải là "Truyền theo giá trị" hay "Truyền theo tham chiếu", thường được gọi là "Gọi theo tham chiếu đối tượng" cũng như "Gọi theo chia sẻ. ” Sẽ rất hữu ích nếu bạn xem xét kỹ hơn bản thân khái niệm này bằng cách chia nhỏ nó thành các phân đoạn trong khi bạn đi sâu vào các chi tiết kỹ thuật cụ thể khi chuyển qua Tham khảo

Đi qua. điều này có nghĩa là cung cấp một phương thức với một đối số

theo tham khảo. điều này có nghĩa là đối số bạn chuyển sang phương thức đề cập đến một biến hiện nằm trong bộ lưu trữ thay vì một bản sao khác của biến đó

Khi bạn gán cho phương thức một tham chiếu đến một biến đã xác định, biến mà nó tương ứng sẽ bị ảnh hưởng rõ ràng bởi tất cả các thao tác trên Tham chiếu này. Bây giờ chúng ta hãy xem xét một ví dụ về cách thức hoạt động của điều này trong thực tế. Trong ví dụ này, chúng tôi đã xác định một biến 'arg' có giá trị là 4. Trong suốt tình huống này, biến 'arg' không được sửa đổi ở vị trí của nó. Python dường như xử lý đối số được cung cấp của bạn thay vì tham chiếu đến biến hiện tại dưới dạng giá trị độc lập

Điều này có nghĩa là thay vì theo Tham chiếu, Python di chuyển các đối số theo giá trị? . Logic cho điều này là gấp đôi

Hiện tại, tham số truyền vào là một con trỏ tới một đối tượng. Một số loại dữ liệu có thể thay đổi và một số không thể thay đổi

Nếu chúng ta di chuyển một đối tượng có thể thay đổi thành một hàm, thì hàm đó sẽ có được một tham chiếu đến chính đối tượng đó để bạn có thể thay đổi tất cả đối tượng đó theo ý muốn của mình; . Sau khi bạn hoàn thành, Tham chiếu bên ngoài sẽ chỉ nhắm vào đối tượng thực tế. Nếu bạn di chuyển một đối tượng bất biến sang một hàm, Tham chiếu bên ngoài luôn có thể không được liên kết lại và bạn không thể thay đổi đối tượng. Để làm cho mọi thứ đơn giản hơn nhiều, hãy hiểu từng cái một

Vượt qua tham chiếu

Trước hết, bạn phải hiểu rằng bản thân biến ‘mylist’ không phải là một danh sách mà dùng để chỉ một danh sách có các giá trị. Bạn có thể gọi biến 'mylist' là một vùng chứa có các giá trị bên trong nó. Các giá trị danh sách là các đối tượng. Biến 'mylist' đã được đưa thẳng vào hàm với nội dung của nó

Cả “danh sách” & “danh sách của tôi” dường như là cùng một biến lưu trữ trong ví dụ mã bên dưới và do đó áp dụng cho cùng một đối tượng lưu trữ. Đó là lý do tại sao trên đầu ra, nó in 'Saeed. ’

Bất kỳ hành động nào được thực hiện trên biến hoặc thực thể sẽ được phản ánh ngay lập tức sang phương thức gọi. Phương thức có thể sửa đổi hoàn toàn giá trị của biến và nhắm nó vào một đối tượng hoàn toàn khác biệt. Như bạn có thể thấy trong hàm 'set_list', chúng tôi đã thay đổi nội dung danh sách và in một danh sách hoàn toàn mới có phần tử 'Aqsa. ' Điều này là do chúng tôi đã trả lại danh sách đã sửa đổi và in nó ở cùng dòng với người gọi

Phương thức này cũng có thể phân bổ lại các phần tử của biến để có kết quả tương tự như bên dưới. Bạn có thể thấy chúng tôi đã thêm một giá trị mới vào danh sách và thay đổi đã được phản ánh. Chúng tôi đã thêm một chuỗi duy nhất vào danh sách và trả lại cho người gọi. Để kết luận, phương thức và người gọi đã sử dụng cùng một biến và đối tượng trong suốt mối quan hệ truyền qua

Vượt qua giá trị

Thông qua truyền giá trị, phương thức được cung cấp một bản sao của đối tượng đối số mà người gọi gán cho nó. Điều này đảm bảo rằng mục gốc không thay đổi và tất cả các sửa đổi đã thực hiện được giữ lại ở các vị trí bộ nhớ riêng biệt trong một bản sao của cùng một đối tượng

Nó có giá trị như nhau với bất kỳ thao tác nào được thực hiện trên một biến hoặc thực thể theo phương thức. Các bản sao của biến & đối tượng trong phạm vi của phương thức gọi được tách biệt hoàn toàn để tóm tắt chúng

Truyền đối tượng theo tham chiếu

Trong trường hợp này, vì Python là khác biệt, nên các phương thức của Python có được tham chiếu đối tượng rất giống nhau trong bộ lưu trữ khi người gọi đề cập đến. Ngược lại, kỹ thuật này không lấy được biến 'mylist' [vùng chứa]. Phương thức người gọi lưu trữ cùng một đối tượng;

Người gọi và phương thức nói về cùng một đối tượng trong bộ lưu trữ, nhưng khi phương thức được nối thêm áp dụng một mục bên ngoài vào danh sách, thực thể người gọi sẽ được sửa đổi. Chúng có nhiều nhãn, nhưng chúng giống nhau. Cả hai biến giữ một đối tượng rất giống nhau. Đó là ý nghĩa đằng sau mối liên hệ của nó với chuyển động của vật thể. Trong bộ lưu trữ, phương thức và người gọi sử dụng một đối tượng tương tự nhưng bắt chúng thông qua nhiều biến. Biến người gọi [bộ chứa] sẽ không bị thay đổi bởi bất kỳ sửa đổi nào được thực hiện đối với biến phương thức [bộ chứa];

Phần kết luận

Python hoạt động độc lập với các ngôn ngữ chấp nhận di chuyển theo Tham chiếu hoặc giá trị của đối số. Đối số của phương thức là các biến cục bộ đã được cấp phát cho mỗi giá trị được truyền cho phương thức. Nhưng điều đó vẫn không ngăn cản bạn đạt được kết quả tương tự mà bạn sẽ tìm thấy ở các ngôn ngữ khác trong khi di chuyển các đối số bằng proxy

Đối số được truyền bằng Python như thế nào?

Thông tin có thể được truyền vào các hàm dưới dạng đối số. Các đối số được chỉ định sau tên hàm, bên trong dấu ngoặc đơn. Bạn có thể thêm bao nhiêu đối số tùy thích, chỉ cần phân tách chúng bằng dấu phẩy

Các đối số của hàm được truyền theo tham chiếu hay theo giá trị?

Các đối số của hàm và hàm con được truyền theo tham chiếu trừ khi định nghĩa hoặc lệnh gọi chỉ định việc truyền theo giá trị .

Có phải Python luôn chuyển qua tham chiếu không?

Python luôn sử dụng các giá trị chuyển qua tham chiếu . Không có bất kỳ ngoại lệ. Bất kỳ phép gán biến nào có nghĩa là sao chép giá trị tham chiếu.

Các chuỗi trong Python có được truyền theo tham chiếu hoặc giá trị không?

Cách Pythonic giải quyết vấn đề này là giữ các chuỗi trong một danh sách và nối chúng lại với nhau sau khi bạn có tất cả các phần. Python không bao giờ chuyển qua tham chiếu . Nó chuyển các tham chiếu, nhưng "chuyển theo tham chiếu" đã được sử dụng cho một kiểu truyền đối số khác [ví dụ: kiểu cho phép hàm swap[a, b] ].

Chủ Đề