22

I am wondering whether there is a way in Python to use .extend, but not change the original list. I'd like the result to look something like this:

>> li = [1, 2, 3, 4]  
>> li
[1, 2, 3, 4]  
>> li.extend([5, 6, 7])
[1, 2, 3, 4, 5, 6, 7]  
>> li
[1, 2, 3, 4]  

I tried to google this a few different ways, but I just couldn't find the correct words to describe this. Ruby has something like this where if you actually want to change the original list you'd do something like: li.extend!([5,6,7]) otherwise it would just give you the result without mutating the original. Does this same thing exist in Python?

Thanks!

dda
  • 6,030
  • 2
  • 25
  • 34
Parris
  • 17,833
  • 17
  • 90
  • 133
  • I don't think Python offers the `!` or not `!` options like Ruby has in its Array methods specifically. Although, the answers below have alternatives to this ideology. – squiguy Mar 18 '13 at 05:25

2 Answers2

52

The + operator in Python is overloaded to concatenate lists, so how about:

>>> li = [1, 2, 3, 4]
>>> new_list = li + [5, 6, 7]
>>> new_list
[1, 2, 3, 4, 5, 6, 7]
Adam Obeng
  • 1,512
  • 10
  • 13
3

I know it's awkward but it works:

a = [1,2,3]
b = list(a)
b.extend([4,5])