list và argument trong Python


Hôm nay ta sẽ tìm hiểu cách đưa tham số (argument) là một list vào trong một function. Ta xem ví dụ sau.

data = [1, 2, 3]

def double(my_data):
    for i in range(len(my_data)):
        my_data[i] = my_data[i] * 2
    return my_data


new_data = double(data)
print(new_data)  # [2,4,6]
print(data)  # [2,4,6]

Ta thấy là khi truyền một list vào trong function thì khi ta thay đổi list bên trong function thì list ban đầu sẽ thay đổi theo. Ví dụ trên hàm double sẽ nhân đôi các giá trị trong list, như vậy giá trị của data ban đầu cũng nhân đôi lên. Vậy để tránh tình trạng trên ta làm như sau.

data2 = [1, 2, 3]

def double2(my_data):
    double_data = my_data[:]  # [1,2,3]
    for i in range(len(double_data)):
        double_data[i] = double_data[i] * 2

    return double_data


new_data2 = double2(data2)
print(new_data2)  # [2,4,6]
print(data2)  # [1,2,3]

Khi truyền một list vào function ta tạo một list mới có tên là double_data có cùng các phần tử của list ban đầu. Ta dùng my_data[:] để lấy tất cả các phần tử của my_data,và gán vào double_data. Như vậy double_data và data2 ta đưa vào function bây giờ là 2 list khác nhau. Nên ta thay đổi double_data không ảnh hưởng đến data2 bên ngoài. Easy easy ^_^