Python Copy List (Slice Entire List)

Copy lists with the slice syntax and the extend method. Benchmark list copying approaches.

Copy list. A list references a region of memory. When assigned, the list reference itself is copied. We sometimes need instead to copy all the elements of a list into a new list. The new list then can be independently modified.List

Example. We use the slice syntax to copy a list. With slices, we separate two numbers with a colon. But when those numbers are omitted, we consider the slice to equal the entire list. So an unspecified slice copies a list.

Tip: This is the shortest syntax form. It requires only a list reference and three characters.

Python program that copies list # A list: list1 = [10, 20, 30] # Copy list1 with slice syntax. list2 = list1[:] # Modify list2. list2[0] = 0 print(list1) print(list2) Output [10, 20, 30] [0, 20, 30]

Extend. Next, we use the extend method to copy a list. We first need to allocate a new, empty list. Then we extend that empty list (list2) with the original list. Extend receives a sequence type.

Note: This approach requires two lines. It is also less efficient. Please see the benchmark section.

Python program that uses extend, copies list list1 = [10, 20, 30] # Create empty list, then extend it. list2 = [] list2.extend(list1) # The lists are separate. list2[0] = 0 print(list1) print(list2) Output [10, 20, 30] [0, 20, 30]

Performance. Here we consider performance of list copying. Version 1 tests the slice syntax. Version 2 instead uses the extend method (after creating an empty list). We repeat these operations ten million times.

List: The list contains five numbers. We use while-loops to repeatedly copy those five elements.


Result: Taking a slice to copy a list is faster. It required just 4.7 seconds, versus 5.3 for the extend method version.

Python program that times list copying import time list1 = [100, 200, 300, 400, 500] print(time.time()) # Version 1: slice i = 0 while i < 10000000: list2 = list1[:] i += 1 print(time.time()) # Version 2: extend i = 0 while i < 10000000: list2 = [] list2.extend(list1) i += 1 print(time.time()) Output 1395252155.968703 1395252160.704971 Slice = 4.736 s 1395252166.045275 Extend = 5.340 s

Summary. A full-list slice is a good way to copy a list. It requires the least amount of syntax. And it performs faster than the alternative approach that uses the extend method. Slicing wins on both considerations.
Dot Net Perls
© 2007-2020 Sam Allen. Every person is special and unique. Send bug reports to