Khóa học python

Copy Array trong Python

0 phút đọc

Có nhiều cách để copy array trong Python, bao gồm sử dụng toán tử gán, phương thức copy(), và các hàm từ module copy. Chúng ta sẽ xem xét từng phương pháp này chi tiết.

Copy Array bằng Toán tử Gán

Sử dụng toán tử gán (=) để copy array thực chất không tạo ra một bản sao mới của array. Thay vào đó, nó chỉ tạo ra một tham chiếu mới đến cùng một đối tượng array trong bộ nhớ.

Ví dụ:

import array as arr

# Tạo một array số nguyên
numbers = arr.array('i', [1, 2, 3, 4, 5])

# Sử dụng toán tử gán để copy array
numbers_copy = numbers

# Thay đổi giá trị của phần tử đầu tiên trong bản sao
numbers_copy[0] = 10

# In cả hai array
print("Original array:", numbers)  # Kết quả: array('i', [10, 2, 3, 4, 5])
print("Copied array:", numbers_copy)  # Kết quả: array('i', [10, 2, 3, 4, 5])

Như bạn có thể thấy, thay đổi trong numbers_copy cũng ảnh hưởng đến numbers vì cả hai đều tham chiếu đến cùng một đối tượng.

Copy Array bằng Phương thức copy()

Phương thức copy() tạo ra một bản sao nông (shallow copy) của array. Điều này có nghĩa là nó tạo ra một đối tượng mới, nhưng các phần tử bên trong vẫn là các tham chiếu đến các đối tượng gốc.

Ví dụ:

import copy

# Tạo một array số nguyên
numbers = [1, 2, 3, 4, 5]

# Sử dụng phương thức copy() để tạo bản sao nông
numbers_copy = copy.copy(numbers)

# Thay đổi giá trị của phần tử đầu tiên trong bản sao
numbers_copy[0] = 10

# In cả hai array
print("Original array:", numbers)  # Kết quả: [1, 2, 3, 4, 5]
print("Copied array:", numbers_copy)  # Kết quả: [10, 2, 3, 4, 5]

Trong ví dụ này, thay đổi trong numbers_copy không ảnh hưởng đến numberscopy.copy() tạo ra một đối tượng mới.

Copy Array bằng Phương thức deepcopy()

Phương thức deepcopy() tạo ra một bản sao sâu (deep copy) của array. Điều này có nghĩa là nó tạo ra một đối tượng mới và sao chép đệ quy tất cả các đối tượng con bên trong.

Ví dụ:

import copy

# Tạo một array số nguyên
numbers = [1, 2, [3, 4], 5]

# Sử dụng phương thức deepcopy() để tạo bản sao sâu
numbers_copy = copy.deepcopy(numbers)

# Thay đổi giá trị của phần tử bên trong bản sao
numbers_copy[2][0] = 10

# In cả hai array
print("Original array:", numbers)  # Kết quả: [1, 2, [3, 4], 5]
print("Copied array:", numbers_copy)  # Kết quả: [1, 2, [10, 4], 5]

Trong ví dụ này, thay đổi trong numbers_copy không ảnh hưởng đến numberscopy.deepcopy() tạo ra một bản sao hoàn toàn độc lập.

Copy Array trong NumPy

NumPy cung cấp nhiều phương thức để copy array, bao gồm copy(), view(), và array().

Sử dụng numpy.copy()

Phương thức numpy.copy() tạo ra một bản sao sâu của array NumPy.

Ví dụ:

import numpy as np

# Tạo một array NumPy
numbers = np.array([1, 2, 3, 4, 5])

# Sử dụng numpy.copy() để tạo bản sao sâu
numbers_copy = np.copy(numbers)

# Thay đổi giá trị của phần tử đầu tiên trong bản sao
numbers_copy[0] = 10

# In cả hai array
print("Original array:", numbers)  # Kết quả: [1 2 3 4 5]
print("Copied array:", numbers_copy)  # Kết quả: [10 2 3 4 5]

Sử dụng numpy.view()

Phương thức numpy.view() tạo ra một bản sao nông của array NumPy. Điều này có nghĩa là các thay đổi trong bản sao sẽ ảnh hưởng đến array gốc và ngược lại.

Ví dụ:

import numpy as np

# Tạo một array NumPy
numbers = np.array([1, 2, 3, 4, 5])

# Sử dụng numpy.view() để tạo bản sao nông
numbers_view = numbers.view()

# Thay đổi giá trị của phần tử đầu tiên trong bản sao
numbers_view[0] = 10

# In cả hai array
print("Original array:", numbers)  # Kết quả: [10 2 3 4 5]
print("View array:", numbers_view)  # Kết quả: [10 2 3 4 5]

Sử dụng numpy.array()

Phương thức numpy.array() cũng có thể được sử dụng để tạo bản sao của array NumPy. Tuy nhiên, nó thường được sử dụng để tạo array mới từ các dữ liệu khác.

Ví dụ:

import numpy as np

# Tạo một array NumPy
numbers = np.array([1, 2, 3, 4, 5])

# Sử dụng numpy.array() để tạo bản sao
numbers_copy = np.array(numbers)

# Thay đổi giá trị của phần tử đầu tiên trong bản sao
numbers_copy[0] = 10

# In cả hai array
print("Original array:", numbers)  # Kết quả: [1 2 3 4 5]
print("Copied array:", numbers_copy)  # Kết quả: [10 2 3 4 5]

Benchmarking các phương pháp copy Array

Để xác định phương pháp copy array nào nhanh nhất, chúng ta có thể sử dụng module timeit để benchmark các phương pháp khác nhau.

Ví dụ:

import numpy as np
import timeit

# Tạo một array NumPy lớn
numbers = np.zeros((1000, 1000))

# Số lần chạy mỗi phương pháp
N = 10000

# Benchmark numpy.copy()
time_copy = timeit.timeit(lambda: np.copy(numbers), number=N)
print(f"numpy.copy(): {time_copy:.6f} seconds")

# Benchmark numpy.view()
time_view = timeit.timeit(lambda: numbers.view(), number=N)
print(f"numpy.view(): {time_view:.6f} seconds")

# Benchmark numpy.array()
time_array = timeit.timeit(lambda: np.array(numbers), number=N)
print(f"numpy.array(): {time_array:.6f} seconds")

Kết quả benchmark sẽ cho bạn biết phương pháp nào nhanh nhất trong việc copy array.

Kết luận

Copy array là một kỹ thuật quan trọng trong lập trình Python, đặc biệt khi làm việc với dữ liệu lớn và phức tạp. Python cung cấp nhiều phương pháp để copy array, bao gồm sử dụng toán tử gán, phương thức copy(), và deepcopy(). NumPy cũng cung cấp các phương pháp riêng để copy array, bao gồm copy(), view(), và array(). Bằng cách nắm vững các kỹ thuật này, bạn có thể dễ dàng làm việc với array để giải quyết nhiều bài toán lập trình khác nhau.

Avatar
Được viết bởi

TechMely Team

Gợi ý câu hỏi phỏng vấn

Gợi ý bài viết

Bình luận

Chưa có bình luận nào

Khoá học javascript từ cơ bản đến chuyên sâuYoutube Techmely