Cho em hỏi, vì sao append(a[:2], a[3:]…) mà giá trị trong slice a sau khi thực hiện câu lệnh này nó thay đổi vậy ạ. Em cảm ơn
Share
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
Đầu tiên thì e cần hình dùng slice giống như 1 biến có 3 giá trị: con trỏ đến mảng giá trị được cấp phát bộ nhớ, len và capacity
lệnh b:= append(a[:2], a[3:]…) sẽ thực hiện như hình dưới
lệnh append sẽ lấy 3 phần tử 4,5,6 thay vào 3 vị trí kế tiếp của a[:2] trong array gốc là a, nên sau lệnh đó thì a sẽ có các phần tử lần lượt là 1,2,4,5,6,6
b sẽ là slice có
và b vẫn trỏ đến đầu slice gốc là a. Em có thể thêm 1 lệnh
a[1] = 10
hoặcb[1] = 10
vào cuối để thấy rằng khi thay đổi a hoặc b thì sẽ đổi giá trị ở mảng gốc => cả a và b đều bị ảnh hưởng
nhưng nhớ rằng length của slice a là 6, còn b chỉ là 5, nên nếu thử b[5]=10 sẽ báo lỗi index out of range.
anh giải thich lại chỗ mảng a thành 1 2 4 5 6 6 dùm em với và 2 cái hình a[:2] vì sao lại là 2 6 vậy anh
a[:2] mà có 2/6 hiểu là len và capacity của a[:2] là 2 và 6 nhé, chứ không phải nó chứa hai phần tử 2 và 6 đâu
slice có 3 thứ để định nghĩa nên: pointer trỏ đến vị trí của mảng dữ liệu, len, capacity
append sẽ thay 3 giá trị 4/5/6 vào 3 vị trí a[2], a[3], a[4]
a[:2] hiểu là 2 phần tử đầu tiên của mảng a => len sẽ là 2
a[:2] vẫn refer đến mảng gốc a, capacity sẽ tính từ vị trí mà nó đến (là vị trí a[0]) đến vị trí cuối cùng của mảng a (là a[5]) nên capacity là 6
a[3:] trỏ đến vị trí a[3], cap tính từ a[3] đến cuối của a (a[5]) nên cap là 3
daj ok em hiểu rôif aj em cảm ơn