Các bác cho em hỏi về vài vấn đề truyền tham số. Cụ thể là nếu biến mình truyền vào là kiểu int float string thì nó sẽ truyền như tham trị. Còn nếu truyền list vào thì nó sẽ có kiểu như tham chiếu.Nếu như bây h em muốn truyền vào 1 list và trả lại 1 anh list khác thì làm như thế nào ạ, bởi em thấy các phép toán đó đều làm thay đổi list truyền vào. Các bác giải thích giúp em nhé, do còn mới học lập trình nên chưa rõ lắm :v
Truyền tham số trong python
ý bạn là truyền list vào dưới dạng tham trị đúng không?
đúng rồi bác, ý em là thế, cái này nó tự chọn kiểu truyền hay sao ấy mà k như C/C++ mình tự định kiểu, đôi lúc tiện đôi lúc không -_- Bác giúp em với nhé
Trong cuốn Learning Python 5th Edition nói khá kĩ phần này, bạn có thể
lst = [some values]
def pass_list_by_value(some_lst):
pass
pass_list_by_value(lst[:]) # 1 cách
pass_list_by_value(list(lst)) # 1 cách nữa
pass_list_by_value(lst.copy()) # cũng là 1 cách
Nhưng nhìn chung, vấn đề chưa dừng lại hết ở đó. Thay đổi cả thằng con của list thì không sao, nhưng thằng con của thằng con thì sẽ có sao
>>> a = [[0], 0]
>>> b = a[:]
>>> b[0][0]
0
>>> b[0][0] = 1
>>> b
[[1], 0]
>>> a
[[1], 0]
Chung quy là bạn phải biết cái list bạn thế nào, rồi sao chép sao không cho bị trùng id
3 Likes
ok cảm ơn bác nhé, em đã hiểu rõ hơn rồi
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?