------
## 最终结论
```python
from collections import Counter

def distance_squared(p1, p2):
    return (p1[0] - p2[0]) ** 2 + (p1[1] - p2[1]) ** 2

def is_square(p1, p2, p3, p4):
    distances = [
        distance_squared(p1, p2),
        distance_squared(p1, p3),
        distance_squared(p1, p4),
        distance_squared(p2, p3),
        distance_squared(p2, p4),
        distance_squared(p3, p4)
    ]
    
    distance_count = Counter(distances)
    
    # A square has 4 equal sides and 2 equal diagonals
    if len(distance_count) == 2:
        side_length, diagonal_length = sorted(distance_count.keys())
        return distance_count[side_length] == 4 and distance_count[diagonal_length] == 2 and diagonal_length > side_length
    return False

# Example usage:
p1 = [0, 0]
p2 = [1, 1]
p3 = [1, 0]
p4 = [0, 1]

print(is_square(p1, p2, p3, p4))  # Output: True
```