Vâng, có một sự khác biệt hiệu suất:
Trong bộ nhớ A (23, 42)
sẽ chứa một thẻ xác định nó như một A
và hai số nguyên 23 và 42. B (23, 42)
sẽ chứa một thẻ xác định nó như là một B
và một con trỏ đến một bộ chứa số nguyên 23
và 42
. Vì vậy, sẽ có thêm một cấp phát bộ nhớ khi tạo một B
và một mức bổ sung của sự gián tiếp khi truy cập các giá trị riêng lẻ bên trong một B
. Vì vậy, trong trường hợp bạn không thực sự sử dụng các đối số constructor như một bộ tuple, sử dụng A
sẽ có ít chi phí hơn so với việc sử dụng B
.
Mặt khác, hàm test_foo
của bạn sẽ tạo một bộ mới mỗi khi được gọi với giá trị A
, nhưng khi được gọi với giá trị B
, nó sẽ trả về bộ nhớ đã tồn tại trong bộ nhớ. Vì vậy, test_foo
là hoạt động rẻ hơn cho B
so với số tiền là A
. Vì vậy, nếu bạn sẽ sử dụng các đối số của hàm tạo như một bộ tuple và bạn sẽ làm như vậy nhiều lần cho cùng một giá trị, sử dụng B
sẽ rẻ hơn. Vì vậy, nếu bạn định sử dụng các đối số hàm tạo như một bộ tuple, bạn nên sử dụng một hàm tạo lấy một bộ tuple vì bạn có thể lấy tuple bằng cách sử dụng mẫu khớp với ít mã hơn và vì nó sẽ tránh phải tạo tuples từ cùng một giá trị nhiều lần. Trong tất cả các trường hợp khác, không sử dụng bộ tuple là thích hợp hơn vì nó liên quan đến việc cấp phát bộ nhớ ít hơn và ít gián tiếp hơn.
câu hỏi hay. – didierc