x = [2] def square_numbers_1(numbers): for number in numbers: # fails; number is copy of numbers[i] number = number*number x[0] = 3 def square_numbers_2(numbers): for i in range(len(numbers)): # OK; modifies list in place numbers[i] = numbers[i]**2 def square_numbers_3(numbers): # often best; returns new list new_list = [] for number in numbers: new_list.append(number**2) return new_list ints = [5, 8, 10] print "before: ints = ", ints square_numbers_1(ints) print "1: ints = ", ints square_numbers_2(ints) print "2: ints = ", ints new_list = square_numbers_3(ints) print "3: ints = ", new_list def square_number(x): x = x**2 a = 3 square_number(a)